Class: Lutaml::Store::ModelSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/store/model_serializer.rb

Overview

Single point of serialization/deserialization for Lutaml::Model objects. All registered models are Lutaml::Model::Serializable, so they uniformly support to_hash / from_hash. No duck-typing needed.

Constant Summary collapse

METADATA_KEY =
"_class"
COMPOSITE_KEY =
"_composite_models"

Instance Method Summary collapse

Instance Method Details

#deserialize(data, expected_class, registration = nil) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/lutaml/store/model_serializer.rb', line 21

def deserialize(data, expected_class, registration = nil)
  validate_data!(data, expected_class)

  model_class = resolve_class(data[METADATA_KEY])
  validate_polymorphic_compatibility!(model_class, expected_class)

  model_data = data.except(METADATA_KEY, COMPOSITE_KEY)
  if registration&.serializer
    registration.serializer.deserialize(model_data, model_class)
  else
    build_model(model_class, model_data)
  end
end

#serialize(model, registration = nil) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/lutaml/store/model_serializer.rb', line 12

def serialize(model, registration = nil)
  hash_data = if registration&.serializer
                registration.serializer.serialize(model)
              else
                extract_hash(model)
              end
  hash_data.merge(METADATA_KEY => model.class.name)
end