Module: Jsoner

Defined in:
lib/emery/jsoner.rb

Defined Under Namespace

Modules: DateSerializer, DateTimeSerializer, FloatSerializer

Constant Summary collapse

@@serializers =
{
    Float => FloatSerializer,
    Date => DateSerializer,
    DateTime => DateTimeSerializer
}

Class Method Summary collapse

Class Method Details

.add_serializer(type, serializer) ⇒ Object



174
175
176
# File 'lib/emery/jsoner.rb', line 174

def self.add_serializer(type, serializer)
  @@serializers[type] = serializer
end

.deserialize(type, json_value) ⇒ Object



183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/emery/jsoner.rb', line 183

def Jsoner.deserialize(type, json_value)
  begin
    if type.methods.include? :jsoner_deserialize
      return type.jsoner_deserialize(json_value)
    elsif @@serializers.include? type
      return @@serializers[type].jsoner_deserialize(json_value)
    else
      if ![String, Float, Integer, TrueClass, FalseClass, NilClass].include? type
        raise JsonerError.new("Type #{type} is not supported in Jsoner deserialization")
      end
      return T.check(type, json_value)
    end
  rescue StandardError => error
    raise JsonerError.new(error.message)
  end
end

.from_json(type, json) ⇒ Object



178
179
180
181
# File 'lib/emery/jsoner.rb', line 178

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

.serialize(type, value) ⇒ Object



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/emery/jsoner.rb', line 204

def Jsoner.serialize(type, value)
  begin
    if type.methods.include? :jsoner_serialize
      return type.jsoner_serialize(value)
    elsif @@serializers.include? type
      return @@serializers[type].jsoner_serialize(value)
    else
      if ![String, Float, Integer, TrueClass, FalseClass, NilClass].include? type
        raise JsonerError.new("Type #{type} is not supported in Jsoner serialization")
      end
      return T.check(type, value)
    end
  rescue StandardError => error
    raise JsonerError.new(error.message)
  end
end

.to_json(type, value) ⇒ Object



200
201
202
# File 'lib/emery/jsoner.rb', line 200

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