Module: Avromatic::Model::RawSerialization::Encode::ClassMethods
- Defined in:
- lib/avromatic/model/raw_serialization.rb
Instance Method Summary collapse
-
#recursive_serialize(value, name: nil, member_types: nil, strict: false) ⇒ Object
rubocop:disable Lint/ShadowedArgument.
Instance Method Details
#recursive_serialize(value, name: nil, member_types: nil, strict: false) ⇒ Object
rubocop:disable Lint/ShadowedArgument
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/avromatic/model/raw_serialization.rb', line 25 def recursive_serialize(value, name: nil, member_types: nil, strict: false) # rubocop:disable Lint/ShadowedArgument member_types = attribute_member_types(name) if name member_types ||= EMPTY_ARRAY if value.is_a?(Avromatic::Model::Attributes) hash = strict ? value.avro_value_datum : value.value_attributes_for_avro if !strict && Avromatic.use_custom_datum_writer if Avromatic.use_encoding_providers? && !value.class.config.mutable # n.b. Ideally we'd just return value here instead of wrapping it in a # hash but then we'd have no place to stash the union member index... hash = { Avromatic::IO::ENCODING_PROVIDER => value } end member_index = member_types.index(value.class) if member_types.any? hash[Avromatic::IO::UNION_MEMBER_INDEX] = member_index if member_index end hash elsif value.is_a?(Array) value.map { |v| recursive_serialize(v, member_types: member_types, strict: strict) } elsif value.is_a?(Hash) value.each_with_object({}) do |(k, v), map| map[k] = recursive_serialize(v, member_types: member_types, strict: strict) end else avro_serializer[name].call(value) end end |