diff --git a/pkg/storage/donut/data/data_v1/data.go b/pkg/storage/donut/data/data_v1/data.go index 3f8d7a33f..ec5e7f0ee 100644 --- a/pkg/storage/donut/data/data_v1/data.go +++ b/pkg/storage/donut/data/data_v1/data.go @@ -1,6 +1,11 @@ package data_v1 -import "errors" +import ( + "bytes" + "encoding/binary" + "encoding/gob" + "io" +) type DataHeader struct { Key string @@ -23,6 +28,22 @@ type EncoderParams struct { Technique EncoderTechnique } -func Write() error { - return errors.New("Not Implemented") +func Write(target io.Writer, header DataHeader, data io.Reader) error { + var headerBuffer bytes.Buffer + // encode header + encoder := gob.NewEncoder(&headerBuffer) + encoder.Encode(header) + // write length of header + if err := binary.Write(target, binary.LittleEndian, headerBuffer.Len()); err != nil { + return err + } + // write encoded header + if _, err := io.Copy(target, &headerBuffer); err != nil { + return err + } + // write data + if _, err := io.Copy(target, data); err != nil { + return err + } + return nil }