Sha256: 15e9c02a38bd04031bd6caeb7674d807a4118153a59c60ec504c976218fcd148

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

# typed: strict

module T
  class Struct
    extend T::Sig

    class << self
      extend T::Sig

      sig { overridable.returns(Typed::Schema) }
      def schema
        Typed::Schema.from_struct(self)
      end

      sig { params(type: Symbol).returns(Typed::Serializer[T.untyped, T.untyped]) }
      def serializer(type)
        case type
        when :deeply_nested_hash
          Typed::HashSerializer.new(schema:, should_serialize_values: true)
        when :hash
          Typed::HashSerializer.new(schema:)
        when :json
          Typed::JSONSerializer.new(schema:)
        else
          raise ArgumentError, "unknown serializer for #{type}"
        end
      end

      sig { params(serializer_type: Symbol, source: T.untyped).returns(Typed::Serializer::DeserializeResult) }
      def deserialize_from(serializer_type, source)
        serializer(serializer_type).deserialize(source)
      end
    end

    sig { params(serializer_type: Symbol).returns(Typed::Result[T.untyped, Typed::SerializeError]) }
    def serialize_to(serializer_type)
      self.class.serializer(serializer_type).serialize(self)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sorbet-schema-0.8.0 lib/sorbet-schema/t/struct.rb