diff --git a/fluent/qp/qp.go b/fluent/qp/qp.go index 5b60800f0940f90bbef3fa24c9103f9e9ad94e80..9362f6f444ea356bbc14ea171f00b3c8fced0f92 100644 --- a/fluent/qp/qp.go +++ b/fluent/qp/qp.go @@ -2,6 +2,8 @@ package qp import ( + "fmt" + "github.com/ipld/go-ipld-prime" ) @@ -10,7 +12,12 @@ type Assemble = func(ipld.NodeAssembler) func BuildMap(np ipld.NodePrototype, sizeHint int64, fn func(ipld.MapAssembler)) (_ ipld.Node, err error) { defer func() { if r := recover(); r != nil { - err = r.(error) + if rerr, ok := r.(error); ok { + err = rerr + } else { + // A reasonable fallback, for e.g. strings. + err = fmt.Errorf("%v", r) + } } }() nb := np.NewBuilder() @@ -49,7 +56,12 @@ func MapEntry(ma ipld.MapAssembler, k string, fn Assemble) { func BuildList(np ipld.NodePrototype, sizeHint int64, fn func(ipld.ListAssembler)) (_ ipld.Node, err error) { defer func() { if r := recover(); r != nil { - err = r.(error) + if rerr, ok := r.(error); ok { + err = rerr + } else { + // A reasonable fallback, for e.g. strings. + err = fmt.Errorf("%v", r) + } } }() nb := np.NewBuilder()