Sha256: 2e1b23b9b2310817805f5a9e2ac1149c292662c1ce64e09e9ac41fccd45b7e03

Contents?: true

Size: 772 Bytes

Versions: 6

Compression:

Stored size: 772 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(Output) }
    def serialize(struct)
      JSON.generate(struct.serialize)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sorbet-schema-0.3.0 lib/typed/json_serializer.rb
sorbet-schema-0.2.2 lib/typed/json_serializer.rb
sorbet-schema-0.2.1 lib/typed/json_serializer.rb
sorbet-schema-0.2.0 lib/typed/json_serializer.rb
sorbet-schema-0.1.1 lib/typed/json_serializer.rb
sorbet-schema-0.1.0 lib/typed/json_serializer.rb