Module: SolidObjects::Serialization

Defined in:
lib/solid_objects/serialization.rb,
sig/generated/lib/solid_objects/serialization.rbs

Constant Summary collapse

MAX_NESTING =

Returns:

  • (::Integer)
100

Class Method Summary collapse

Class Method Details

.deep_copy(value) ⇒ Object

RBS:

  • (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


30
31
32
33
34
# File 'lib/solid_objects/serialization.rb', line 30

def deep_copy(value)
  JSON.parse(JSON.generate(normalize(value), max_nesting: MAX_NESTING))
rescue JSON::GeneratorError, JSON::ParserError, EncodingError => error
  raise InvalidPayload, error.message
end

.dump(value, max_bytes: nil) ⇒ Object

RBS:

  • (untyped, ?max_bytes: Integer?) -> untyped

Parameters:

  • (Object)
  • max_bytes: (Integer, nil) (defaults to: nil)

Returns:

  • (Object)


9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/solid_objects/serialization.rb', line 9

def dump(value, max_bytes: nil)
  normalized = normalize(value)
  encoded = JSON.generate(normalized, max_nesting: MAX_NESTING)

  if max_bytes && encoded.bytesize > max_bytes
    raise PayloadTooLarge, "serialized value exceeds #{max_bytes} bytes"
  end

  normalized
rescue JSON::GeneratorError, EncodingError => error
  raise InvalidPayload, error.message
end

.load(value) ⇒ Object

RBS:

  • (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


23
24
25
26
27
# File 'lib/solid_objects/serialization.rb', line 23

def load(value)
  return nil if value.nil?

  normalize(value)
end

.readonly_copy(value) ⇒ Object

RBS:

  • (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


37
38
39
# File 'lib/solid_objects/serialization.rb', line 37

def readonly_copy(value)
  freeze_recursively(deep_copy(value))
end