Sha256: a3f8d5186cb1b7c48ea7cedfd642875481925c9dbe52510fab86942386a9401e
Contents?: true
Size: 968 Bytes
Versions: 1
Compression:
Stored size: 968 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(struct.serialize)) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sorbet-schema-0.4.0 | lib/typed/json_serializer.rb |