class LIT::Serializer
@api public @since 0.1.0
Public Class Methods
new(object)
click to toggle source
# File lib/lit/serializer.rb, line 7 def initialize(object) @object = object end
Public Instance Methods
serialize()
click to toggle source
# File lib/lit/serializer.rb, line 11 def serialize serialize_object(@object) end
Private Instance Methods
serialize_array(array)
click to toggle source
# File lib/lit/serializer.rb, line 64 def serialize_array(array) array.__values__.map { |value| serialize_object(value) } end
serialize_enum_variant(variant)
click to toggle source
# File lib/lit/serializer.rb, line 53 def serialize_enum_variant(variant) data = if variant.__kind__ == :struct serialize_struct(variant) else nil end { kind: variant.__name__, data: data } end
serialize_map(map)
click to toggle source
# File lib/lit/serializer.rb, line 68 def serialize_map(map) map.__values__.reduce({}) do |acc, (key, value)| acc.merge(serialize_object(key) => serialize_object(value)) end end
serialize_object(object)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/lit/serializer.rb, line 18 def serialize_object(object) if object.is_a?(Object::Struct) if object.is_a?(Object::EnumVariant) serialize_enum_variant(object) else serialize_struct(object) end elsif object.is_a?(Module) && object <= Object::EnumVariant serialize_enum_variant(object) elsif object.is_a?(Object::Array) serialize_array(object) elsif object.is_a?(Object::Map) serialize_map(object) elsif object.is_a?(Object::Option::Some) || object == Object::Option::None serialize_option(object) elsif object.is_a?(String) || object.is_a?(Integer) || object.is_a?(Float) || object == true || object == false || object.nil? object else raise InvalidObjectError, "invalid object: #{object}" end end
serialize_option(option)
click to toggle source
# File lib/lit/serializer.rb, line 74 def serialize_option(option) if option == Object::Option::None nil else serialize_object(option.__value__) end end
serialize_struct(struct)
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/lit/serializer.rb, line 46 def serialize_struct(struct) struct.instance_variables.reduce({}) do |hsh, ivar| field_name = ivar.to_s.sub("@", "").to_sym hsh.merge(field_name => serialize_object(struct.public_send(field_name))) end end