class Google::Protobuf::EnumDescriptor

Attributes

descriptor[RW]
descriptor_pool[RW]

Public Class Methods

from_native(enum_def, _) click to toggle source

@param enum_def [::FFI::Pointer] EnumDef pointer to be wrapped @param _ [Object] Unused

# File lib/google/protobuf/ffi/enum_descriptor.rb, line 31
def from_native(enum_def, _)
  return nil if enum_def.nil? or enum_def.null?
  file_def = Google::Protobuf::FFI.get_message_file_def enum_def
  descriptor_from_file_def(file_def, enum_def)
end
new(*arguments, &block) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 38
def self.new(*arguments, &block)
  raise "Descriptor objects may not be created from Ruby."
end
new(enum_def, descriptor_pool) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 95
def initialize(enum_def, descriptor_pool)
  @descriptor_pool = descriptor_pool
  @enum_def = enum_def
  @module = nil
end
to_native(value, _) click to toggle source

@param value [EnumDescriptor] EnumDescriptor to convert to an FFI native type @param _ [Object] Unused

# File lib/google/protobuf/ffi/enum_descriptor.rb, line 24
def to_native(value, _)
  value.instance_variable_get(:@enum_def) || ::FFI::Pointer::NULL
end

Private Class Methods

lookup(number) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 134
def self.lookup(number)
  descriptor.lookup_value number
end
lookup_name(enum_def, name) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 116
def self.lookup_name(enum_def, name)
  enum_value = Google::Protobuf::FFI.enum_value_by_name(enum_def, name.to_s, name.size)
  if enum_value.null?
    nil
  else
    Google::Protobuf::FFI.enum_number(enum_value)
  end
end
lookup_value(enum_def, number) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 107
def self.lookup_value(enum_def, number)
  enum_value = Google::Protobuf::FFI.enum_value_by_number(enum_def, number)
  if enum_value.null?
    nil
  else
    Google::Protobuf::FFI.enum_name(enum_value).to_sym
  end
end
private_constructor(enum_def, descriptor_pool) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 101
def self.private_constructor(enum_def, descriptor_pool)
  instance = allocate
  instance.send(:initialize, enum_def, descriptor_pool)
  instance
end
resolve(name) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 138
def self.resolve(name)
  descriptor.lookup_name name
end

Public Instance Methods

each() { |enum_name.to_sym, enum_number| ... } click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 66
def each &block
  n = Google::Protobuf::FFI.enum_value_count(self)
  0.upto(n - 1) do |i|
    enum_value = Google::Protobuf::FFI.enum_value_by_index(self, i)
    yield(Google::Protobuf::FFI.enum_name(enum_value).to_sym, Google::Protobuf::FFI.enum_number(enum_value))
  end
  nil
end
enummodule() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 75
def enummodule
  if @module.nil?
    @module = build_enum_module
  end
  @module
end
file_descriptor() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 42
def file_descriptor
  @descriptor_pool.send(:get_file_descriptor, Google::Protobuf::FFI.get_enum_file_descriptor(self))
end
inspect() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 54
def inspect
  "#{self.class.name}: #{name}"
end
lookup_name(name) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 58
def lookup_name(name)
  self.class.send(:lookup_name, self, name)
end
lookup_value(number) click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 62
def lookup_value(number)
  self.class.send(:lookup_value, self, number)
end
name() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 46
def name
  Google::Protobuf::FFI.get_enum_fullname(self)
end
options() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 82
def options
  @options ||= begin
    size_ptr = ::FFI::MemoryPointer.new(:size_t, 1)
    temporary_arena = Google::Protobuf::FFI.create_arena
    buffer = Google::Protobuf::FFI.enum_options(self, size_ptr, temporary_arena)
    opts = Google::Protobuf::EnumOptions.decode(buffer.read_string_length(size_ptr.read(:size_t)).force_encoding("ASCII-8BIT").freeze)
    opts.clear_features()
    opts.freeze
  end
end
to_s() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 50
def to_s
  inspect
end

Private Instance Methods

build_enum_module() click to toggle source
# File lib/google/protobuf/ffi/enum_descriptor.rb, line 125
def build_enum_module
  descriptor = self
  dynamic_module = Module.new do
    @descriptor = descriptor

    class << self
      attr_accessor :descriptor
    end

    def self.lookup(number)
      descriptor.lookup_value number
    end

    def self.resolve(name)
      descriptor.lookup_name name
    end
  end

  self.each do |name, value|
    if name[0] < 'A' || name[0] > 'Z'
      if name[0] >= 'a' and name[0] <= 'z'
        name = name[0].upcase + name[1..-1] # auto capitalize
      else
        warn(
          "Enum value '#{name}' does not start with an uppercase letter " +
            "as is required for Ruby constants.")
        next
      end
    end
    dynamic_module.const_set(name.to_sym, value)
  end
  dynamic_module
end