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  }