container: add readme, remove extra formats, remove go-ipld-cbor dependency

This commit is contained in:
Michael Muré
2024-10-07 18:46:19 +02:00
parent 60922ced96
commit 40639b6715
13 changed files with 191 additions and 167 deletions

View File

@@ -1,13 +1,10 @@
package container
import (
"compress/flate"
"compress/gzip"
"encoding/base64"
"io"
"github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/ipld/go-ipld-prime"
"github.com/ipld/go-ipld-prime/codec/dagcbor"
"github.com/ipld/go-ipld-prime/datamodel"
@@ -15,12 +12,16 @@ import (
"github.com/ipld/go-ipld-prime/node/basicnode"
)
// TODO: should we have a multibase to wrap the cbor? but there is no reader/write in go-multibase :-(
// Writer is a token container writer. It provides a convenient way to aggregate and serialize tokens together.
type Writer map[cid.Cid][]byte
func NewWriter() Writer {
return make(Writer)
}
// AddSealed includes a "sealed" token (serialized with a ToSealed* function) in the container.
func (ctn Writer) AddSealed(cid cid.Cid, data []byte) {
ctn[cid] = data
}
@@ -41,19 +42,7 @@ func (ctn Writer) ToCarBase64(w io.Writer) error {
return ctn.ToCar(w2)
}
func (ctn Writer) ToCarGzip(w io.Writer) error {
w2 := gzip.NewWriter(w)
defer w2.Close()
return ctn.ToCar(w2)
}
func (ctn Writer) ToCarGzipBase64(w io.Writer) error {
w2 := base64.NewEncoder(base64.StdEncoding, w)
defer w2.Close()
return ctn.ToCarGzip(w2)
}
func (ctn Writer) ToCbor2(w io.Writer) error {
func (ctn Writer) ToCbor(w io.Writer) error {
node, err := qp.BuildList(basicnode.Prototype.Any, int64(len(ctn)), func(la datamodel.ListAssembler) {
for _, bytes := range ctn {
qp.ListEntry(la, qp.Bytes(bytes))
@@ -65,43 +54,8 @@ func (ctn Writer) ToCbor2(w io.Writer) error {
return ipld.EncodeStreaming(w, node, dagcbor.Encode)
}
func (ctn Writer) ToCbor(w io.Writer) error {
raw := make([][]byte, 0, len(ctn))
for _, bytes := range ctn {
raw = append(raw, bytes)
}
return cbor.EncodeWriter(raw, w)
}
func (ctn Writer) ToCborBase64(w io.Writer) error {
w2 := base64.NewEncoder(base64.StdEncoding, w)
defer w2.Close()
return ctn.ToCbor(w2)
}
func (ctn Writer) ToCborGzip(w io.Writer) error {
w2 := gzip.NewWriter(w)
defer w2.Close()
return ctn.ToCbor(w2)
}
func (ctn Writer) ToCborGzipBase64(w io.Writer) error {
w2 := base64.NewEncoder(base64.StdEncoding, w)
defer w2.Close()
return ctn.ToCborGzip(w2)
}
func (ctn Writer) ToCborFlate(w io.Writer) error {
w2, err := flate.NewWriter(w, flate.DefaultCompression)
if err != nil {
return err
}
defer w2.Close()
return ctn.ToCbor(w2)
}
func (ctn Writer) ToCborFlateBase64(w io.Writer) error {
w2 := base64.NewEncoder(base64.StdEncoding, w)
defer w2.Close()
return ctn.ToCborFlate(w2)
}