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