Sha256: 2dbcb0c627a029b945da5e62f013f90f46cfe9bce8dfa9f5cdee9b360ecb37f8
Contents?: true
Size: 1013 Bytes
Versions: 7
Compression:
Stored size: 1013 Bytes
Contents
# typed: strict require "json" module Typed class JSONSerializer < Serializer Input = type_member { {fixed: String} } Output = type_member { {fixed: String} } sig { override.params(source: Input).returns(Result[T::Struct, DeserializeError]) } def deserialize(source) parsed_json = JSON.parse(source) creation_params = schema.fields.each_with_object(T.let({}, Params)) do |field, hsh| hsh[field.name] = parsed_json[field.name.to_s] end deserialize_from_creation_params(creation_params) rescue JSON::ParserError Failure.new(ParseError.new(format: :json)) end sig { override.params(struct: T::Struct).returns(Result[Output, SerializeError]) } def serialize(struct) return Failure.new(SerializeError.new("'#{struct.class}' cannot be serialized to target type of '#{schema.target}'.")) if struct.class != schema.target Success.new(JSON.generate(serialize_from_struct(struct:, should_serialize_values: true))) end end end
Version data entries
7 entries across 7 versions & 1 rubygems