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



165
166
167
# File 'lib/emery/jsoner.rb', line 165

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

.deserialize(type, json_value) ⇒ Object



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/emery/jsoner.rb', line 174

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



169
170
171
172
# File 'lib/emery/jsoner.rb', line 169

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

.serialize(type, value) ⇒ Object



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'lib/emery/jsoner.rb', line 195

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



191
192
193
# File 'lib/emery/jsoner.rb', line 191

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