diff options
| author | Kip Cole | 2013-12-08 11:20:22 +0800 | 
|---|---|---|
| committer | Kip Cole | 2013-12-08 11:20:22 +0800 | 
| commit | 2ebc0504d3b5e11676bf37d5322cf48a24b3785c (patch) | |
| tree | 4eb995a82944ebb6d6ac2b6a0a33590e7acf2ca9 /vendor/thrift/union.rb | |
| parent | 9849cdc7e47a511734a541e389a50b575f814fa3 (diff) | |
| download | evernote-2ebc0504d3b5e11676bf37d5322cf48a24b3785c.tar.bz2 | |
Remove thrift embedding
Diffstat (limited to 'vendor/thrift/union.rb')
| -rw-r--r-- | vendor/thrift/union.rb | 179 | 
1 files changed, 0 insertions, 179 deletions
| diff --git a/vendor/thrift/union.rb b/vendor/thrift/union.rb deleted file mode 100644 index a7058f2..0000000 --- a/vendor/thrift/union.rb +++ /dev/null @@ -1,179 +0,0 @@ -#  -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -#  -#   http://www.apache.org/licenses/LICENSE-2.0 -#  -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -#  - -module Thrift -  class Union -    def initialize(name=nil, value=nil) -      if name -        if name.is_a? Hash -          if name.size > 1 -            raise "#{self.class} cannot be instantiated with more than one field!" -          end - -          name, value = name.keys.first, name.values.first -        end - -        if Thrift.type_checking -          raise Exception, "#{self.class} does not contain a field named #{name}!" unless name_to_id(name.to_s) -        end - -        if value.nil? -          raise Exception, "Union #{self.class} cannot be instantiated with setfield and nil value!" -        end - -        Thrift.check_type(value, struct_fields[name_to_id(name.to_s)], name) if Thrift.type_checking -      elsif !value.nil? -        raise Exception, "Value provided, but no name!" -      end -      @setfield = name -      @value = value -    end - -    def inspect -      if get_set_field -        "<#{self.class} #{@setfield}: #{inspect_field(@value, struct_fields[name_to_id(@setfield.to_s)])}>" -      else -        "<#{self.class} >" -      end -    end - -    def read(iprot) -      iprot.read_struct_begin -      fname, ftype, fid = iprot.read_field_begin -      handle_message(iprot, fid, ftype) -      iprot.read_field_end - -      fname, ftype, fid = iprot.read_field_begin -      raise "Too many fields for union" unless (ftype == Types::STOP)  - -      iprot.read_struct_end -      validate -    end - -    def write(oprot) -      validate -      oprot.write_struct_begin(self.class.name) - -      fid = self.name_to_id(@setfield.to_s) - -      field_info = struct_fields[fid] -      type = field_info[:type] -      if is_container? type -        oprot.write_field_begin(@setfield, type, fid) -        write_container(oprot, @value, field_info) -        oprot.write_field_end -      else -        oprot.write_field(@setfield, type, fid, @value) -      end - -      oprot.write_field_stop -      oprot.write_struct_end -    end - -    def ==(other) -      other != nil && @setfield == other.get_set_field && @value == other.get_value -    end - -    def eql?(other) -      self.class == other.class && self == other -    end - -    def hash -      [self.class.name, @setfield, @value].hash -    end - -    def self.field_accessor(klass, field_info) -      klass.send :define_method, field_info[:name] do -        if field_info[:name].to_sym == @setfield -          @value -        else  -          raise RuntimeError, "#{field_info[:name]} is not union's set field." -        end -      end - -      klass.send :define_method, "#{field_info[:name]}=" do |value| -        Thrift.check_type(value, field_info, field_info[:name]) if Thrift.type_checking -        @setfield = field_info[:name].to_sym -        @value = value -      end -    end - -    def self.qmark_isset_method(klass, field_info) -      klass.send :define_method, "#{field_info[:name]}?" do -        get_set_field == field_info[:name].to_sym && !get_value.nil? -      end -    end - -    def self.generate_accessors(klass) -      klass::FIELDS.values.each do |field_info| -        field_accessor(klass, field_info) -        qmark_isset_method(klass, field_info) -      end -    end - -    # get the symbol that indicates what the currently set field type is.  -    def get_set_field -      @setfield -    end - -    # get the current value of this union, regardless of what the set field is. -    # generally, you should only use this method when you don't know in advance -    # what field to expect. -    def get_value -      @value -    end - -    def <=>(other) -      if self.class == other.class -        if get_set_field == other.get_set_field -          if get_set_field.nil? -            0 -          else -            get_value <=> other.get_value -          end -        else -          if get_set_field && other.get_set_field.nil? -            -1 -          elsif get_set_field.nil? && other.get_set_field -            1 -          elsif get_set_field.nil? && other.get_set_field.nil? -            0 -          else -            name_to_id(get_set_field.to_s) <=> name_to_id(other.get_set_field.to_s) -          end -        end -      else -        self.class <=> other.class -      end -    end - -    protected - -    def handle_message(iprot, fid, ftype) -      field = struct_fields[fid] -      if field and field[:type] == ftype -        @value = read_field(iprot, field) -        name = field[:name].to_sym -        @setfield = name -      else -        iprot.skip(ftype) -      end -    end -  end -end
\ No newline at end of file | 
