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 |