31 lines
557 B
Go
31 lines
557 B
Go
|
|
package tokens
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"github.com/ipld/go-ipld-prime"
|
||
|
|
"github.com/ipld/go-ipld-prime/codec/dagcbor"
|
||
|
|
|
||
|
|
"github.com/ucan-wg/go-ucan/tokens/delegation"
|
||
|
|
"github.com/ucan-wg/go-ucan/tokens/internal/envelope"
|
||
|
|
)
|
||
|
|
|
||
|
|
func FromDagCbor(b []byte) (any, error) {
|
||
|
|
node, err := ipld.Decode(b, dagcbor.Decode)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
tag, err := envelope.FindTag(node)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
switch tag {
|
||
|
|
case delegation.Tag:
|
||
|
|
return delegation.FromIPLD(node)
|
||
|
|
default:
|
||
|
|
return nil, fmt.Errorf(`unknown tag "%s"`, tag)
|
||
|
|
}
|
||
|
|
}
|