module Lutaml::Model::Serialize::ClassMethods
def generate_hash_from_child_mappings(attr, value, format, child_mappings)
def generate_hash_from_child_mappings(attr, value, format, child_mappings) return value unless child_mappings hash = {} if child_mappings.values == [:key] klass = value.first.class mappings = klass.mappings_for(format) klass.attributes.each_key do |name| next if child_mappings.key?(name.to_sym) || child_mappings.key?(name.to_s) child_mappings[name.to_sym] = mappings.find_by_to(name)&.name.to_s || name.to_s end end value.each do |child_obj| map_key = nil map_value = {} mapping_rules = attr.type.mappings_for(format) child_mappings.each do |attr_name, path| mapping_rule = mapping_rules.find_by_to(attr_name) attr_value = child_obj.send(attr_name) attr_value = if attr_value.is_a?(Lutaml::Model::Serialize) attr_value.to_yaml_hash elsif attr_value.is_a?(Array) && attr_value.first.is_a?(Lutaml::Model::Serialize) attr_value.map(&:to_yaml_hash) else attr_value end next unless mapping_rule&.render?(attr_value) if path == :key map_key = attr_value elsif path == :value map_value = attr_value else path = [path] unless path.is_a?(Array) path[0...-1].inject(map_value) do |acc, k| acc[k.to_s] ||= {} end.public_send(:[]=, path.last.to_s, attr_value) end end map_value = nil if map_value.empty? hash[map_key] = map_value end hash end