Class: Protobuf::Field::EnumField

Inherits:
IntegerField show all
Defined in:
lib/protobuf/field/enum_field.rb

Constant Summary

Constants inherited from VarintField

VarintField::INT32_MAX, VarintField::INT32_MIN, VarintField::INT64_MAX, VarintField::INT64_MIN, VarintField::UINT32_MAX, VarintField::UINT64_MAX

Constants inherited from BaseField

BaseField::OBJECT_MODULE, BaseField::PACKED_TYPES

Instance Attribute Summary

Attributes inherited from BaseField

#default_value, #fully_qualified_name, #message_class, #name, #options, #rule, #tag, #type_class

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from VarintField

encode, #wire_type

Methods inherited from BaseField

#default, #define_encode_to_stream!, #define_field_and_present_predicate!, #define_field_predicate!, #define_set_field!, #define_set_method!, #define_to_message_hash!, #define_value_from_values!, #define_value_from_values_for_serialization!, #deprecated?, #encode_to_stream, #extension?, #field?, #field_and_present?, #fully_qualified_name_only!, #initialize, #map?, #message?, #optional?, #packed?, #repeated?, #repeated_message?, #required?, #set, #set_default_value!, #set_field, #set_map!, #set_repeated_message!, #tag_encoded, #to_message_hash, #to_message_hash_with_string_key, #to_s, #value_from_values, #value_from_values_for_serialization, #wire_type

Methods included from Logging

initialize_logger, #log_exception, #log_signature, #logger, #sign_message

Constructor Details

This class inherits a constructor from Protobuf::Field::BaseField

Class Method Details

.defaultObject

Class Methods



11
12
13
# File 'lib/protobuf/field/enum_field.rb', line 11

def self.default
  fail NoMethodError, "#{self}.#{__method__} must be called on an instance"
end

Instance Method Details

#acceptable?(val) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/protobuf/field/enum_field.rb', line 28

def acceptable?(val)
  !type_class.fetch(val).nil?
end

#coerce!(value) ⇒ Object



36
37
38
# File 'lib/protobuf/field/enum_field.rb', line 36

def coerce!(value)
  type_class.fetch(value) || fail(TypeError, "Invalid Enum value: #{value.inspect} for #{name}")
end

#decode(value) ⇒ Object



23
24
25
26
# File 'lib/protobuf/field/enum_field.rb', line 23

def decode(value)
  value -= 0x1_0000_0000_0000_0000 if (value & 0x8000_0000_0000_0000).nonzero?
  value if acceptable?(value)
end

#encode(value) ⇒ Object

Public Instance Methods



18
19
20
21
# File 'lib/protobuf/field/enum_field.rb', line 18

def encode(value)
  # original Google's library uses 64bits integer for negative value
  ::Protobuf::Field::VarintField.encode(value.to_i & 0xffff_ffff_ffff_ffff)
end

#enum?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/protobuf/field/enum_field.rb', line 32

def enum?
  true
end

#json_encode(value) ⇒ Object



40
41
42
43
# File 'lib/protobuf/field/enum_field.rb', line 40

def json_encode(value)
  enum = type_class.enums.find { |e| e.to_i == value }
  enum.to_s(:name)
end