diff --git a/token/delegation/ipld.go b/token/delegation/ipld.go index f0f01cc..7c21b79 100644 --- a/token/delegation/ipld.go +++ b/token/delegation/ipld.go @@ -32,7 +32,7 @@ func (t *Token) ToSealed(privKey crypto.PrivKey) ([]byte, cid.Cid, error) { return data, id, nil } -// ToSealedWriter is the same as Seal but accepts an io.Writer. +// ToSealedWriter is the same as ToSealed but accepts an io.Writer. func (t *Token) ToSealedWriter(w io.Writer, privKey crypto.PrivKey) (cid.Cid, error) { cidWriter := envelope.NewCIDWriter(w) @@ -93,7 +93,7 @@ func (t *Token) Encode(privKey crypto.PrivKey, encFn codec.Encoder) ([]byte, err return ipld.Encode(node, encFn) } -// EncodeWriter is the same as Encode but accepts an io.Writer. +// EncodeWriter is the same as Encode, but accepts an io.Writer. func (t *Token) EncodeWriter(w io.Writer, privKey crypto.PrivKey, encFn codec.Encoder) error { node, err := t.toIPLD(privKey) if err != nil { @@ -108,7 +108,7 @@ func (t *Token) ToDagCbor(privKey crypto.PrivKey) ([]byte, error) { return t.Encode(privKey, dagcbor.Encode) } -// ToDagCborWriter is the same as ToDagCbor but it accepts an io.Writer. +// ToDagCborWriter is the same as ToDagCbor, but it accepts an io.Writer. func (t *Token) ToDagCborWriter(w io.Writer, privKey crypto.PrivKey) error { return t.EncodeWriter(w, privKey, dagcbor.Encode) } @@ -118,7 +118,7 @@ func (t *Token) ToDagJson(privKey crypto.PrivKey) ([]byte, error) { return t.Encode(privKey, dagjson.Encode) } -// ToDagJsonWriter is the same as ToDagJson but it accepts an io.Writer. +// ToDagJsonWriter is the same as ToDagJson, but it accepts an io.Writer. func (t *Token) ToDagJsonWriter(w io.Writer, privKey crypto.PrivKey) error { return t.EncodeWriter(w, privKey, dagjson.Encode) } diff --git a/token/interface.go b/token/interface.go new file mode 100644 index 0000000..4e8e1c9 --- /dev/null +++ b/token/interface.go @@ -0,0 +1,41 @@ +package token + +import ( + "io" + + "github.com/ipfs/go-cid" + "github.com/ipld/go-ipld-prime/codec" + "github.com/libp2p/go-libp2p/core/crypto" + + "github.com/ucan-wg/go-ucan/did" + "github.com/ucan-wg/go-ucan/pkg/meta" +) + +type Token interface { + Marshaller + + // Issuer returns the did.DID representing the Token's issuer. + Issuer() did.DID + // Meta returns the Token's metadata. + Meta() *meta.Meta +} + +type Marshaller interface { + // ToSealed wraps the token in an envelope, generates the signature, encodes + // the result to DAG-CBOR and calculates the CID of the resulting binary data. + ToSealed(privKey crypto.PrivKey) ([]byte, cid.Cid, error) + // ToSealedWriter is the same as ToSealed but accepts an io.Writer. + ToSealedWriter(w io.Writer, privKey crypto.PrivKey) (cid.Cid, error) + // Encode marshals a Token to the format specified by the provided codec.Encoder. + Encode(privKey crypto.PrivKey, encFn codec.Encoder) ([]byte, error) + // EncodeWriter is the same as Encode, but accepts an io.Writer. + EncodeWriter(w io.Writer, privKey crypto.PrivKey, encFn codec.Encoder) error + // ToDagCbor marshals the Token to the DAG-CBOR format. + ToDagCbor(privKey crypto.PrivKey) ([]byte, error) + // ToDagCborWriter is the same as ToDagCbor, but it accepts an io.Writer. + ToDagCborWriter(w io.Writer, privKey crypto.PrivKey) error + // ToDagJson marshals the Token to the DAG-JSON format. + ToDagJson(privKey crypto.PrivKey) ([]byte, error) + // ToDagJsonWriter is the same as ToDagJson, but it accepts an io.Writer. + ToDagJsonWriter(w io.Writer, privKey crypto.PrivKey) error +}