Module: Jsoner

Defined in:
lib/emery/jsoner.rb

Constant Summary collapse

@@codecs =
[
  Codecs::FloatCodec,
  Codecs::DateCodec,
  Codecs::DateTimeCodec,
  Codecs::StringFormattedCodec,
  Codecs::UnionCodec,
  Codecs::NilableCodec,
  Codecs::ArrayCodec,
  Codecs::HashCodec,
  Codecs::UnknownCodec,
  Codecs::EnumCodec,
  Codecs::DataClassCodec,
  Codecs::TaggedUnionCodec,
  Codecs::BuiltinTypeCodec,
]

Class Method Summary collapse

Class Method Details

.deserialize(type, json_value) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/emery/jsoner.rb', line 41

def Jsoner.deserialize(type, json_value)
  begin
    codec = Jsoner.find_codec(type)
    if codec == nil
      raise JsonerError.new("Type #{type} is not supported in Jsoner deserialization")
    end
    return codec.deserialize(type, json_value)
  rescue StandardError => error
    raise JsonerError.new(error.message)
  end
end

.find_codec(type) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/emery/jsoner.rb', line 27

def Jsoner.find_codec(type)
  @@codecs.each do |serializer|
    if serializer.applicable?(type)
      return serializer
    end
  end
  return nil
end

.from_json(type, json) ⇒ Object



36
37
38
39
# File 'lib/emery/jsoner.rb', line 36

def Jsoner.from_json(type, json)
  data = JSON.parse(json)
  return deserialize(type, data)
end

.insert_codec(codec) ⇒ Object



23
24
25
# File 'lib/emery/jsoner.rb', line 23

def self.insert_codec(codec)
  @@codecs.insert(0, codec)
end

.serialize(type, value) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/emery/jsoner.rb', line 57

def Jsoner.serialize(type, value)
  begin
    codec = Jsoner.find_codec(type)
    if codec == nil
      raise JsonerError.new("Type #{type} is not supported in Jsoner serialization")
    end
    return codec.serialize(type, value)
  rescue StandardError => error
    raise JsonerError.new(error.message)
  end
end

.to_json(type, value) ⇒ Object



53
54
55
# File 'lib/emery/jsoner.rb', line 53

def Jsoner.to_json(type, value)
  JSON.dump(serialize(type, value))
end