github.com/storacha/go-ucanto@v0.7.2/core/schema/schema.go (about) 1 package schema 2 3 import ( 4 "github.com/ipld/go-ipld-prime/node/basicnode" 5 "github.com/storacha/go-ucanto/core/ipld" 6 "github.com/storacha/go-ucanto/core/result/failure" 7 ) 8 9 type Reader[I, O any] interface { 10 Read(input I) (O, failure.Failure) 11 } 12 13 type reader[I, O any] struct { 14 readFunc func(input I) (O, failure.Failure) 15 } 16 17 func (r reader[I, O]) Read(input I) (O, failure.Failure) { 18 return r.readFunc(input) 19 } 20 21 type schemaerr struct { 22 message string 23 } 24 25 func (se schemaerr) Name() string { 26 return "SchemaError" 27 } 28 29 func (se schemaerr) Error() string { 30 return se.message 31 } 32 33 func (se schemaerr) ToIPLD() (ipld.Node, error) { 34 np := basicnode.Prototype.Any 35 nb := np.NewBuilder() 36 ma, err := nb.BeginMap(2) 37 if err != nil { 38 return nil, err 39 } 40 ma.AssembleKey().AssignString("name") 41 ma.AssembleValue().AssignString(se.Name()) 42 ma.AssembleKey().AssignString("message") 43 ma.AssembleValue().AssignString(se.Error()) 44 ma.Finish() 45 return nb.Build(), nil 46 } 47 48 func NewSchemaError(message string) failure.Failure { 49 return schemaerr{message} 50 }