From 0fe27421c7f37ba38445ead185580ca4e73b2664 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 30 Mar 2026 13:10:28 +0000 Subject: object/store/memory: I guess implement the ObjectWriter interface --- object/store/memory/write_bytes.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 object/store/memory/write_bytes.go (limited to 'object/store/memory/write_bytes.go') diff --git a/object/store/memory/write_bytes.go b/object/store/memory/write_bytes.go new file mode 100644 index 00000000..241169d9 --- /dev/null +++ b/object/store/memory/write_bytes.go @@ -0,0 +1,35 @@ +package memory + +import ( + "bytes" + + objectheader "codeberg.org/lindenii/furgit/object/header" + objectid "codeberg.org/lindenii/furgit/object/id" + objecttype "codeberg.org/lindenii/furgit/object/type" +) + +// WriteBytesContent writes one typed object content byte slice. +func (store *Store) WriteBytesContent(ty objecttype.Type, content []byte) (objectid.ObjectID, error) { + id := store.algo.Sum(buildRawObject(ty, content)) + store.objects[id] = storedObject{ty: ty, content: append([]byte(nil), content...)} + + return id, nil +} + +// WriteBytesFull writes one full serialized object byte slice as "type size\0content". +func (store *Store) WriteBytesFull(raw []byte) (objectid.ObjectID, error) { + return store.WriteReaderFull(bytes.NewReader(raw)) +} + +func buildRawObject(ty objecttype.Type, body []byte) []byte { + header, ok := objectheader.Encode(ty, int64(len(body))) + if !ok { + panic("failed to encode object header") + } + + raw := make([]byte, len(header)+len(body)) + copy(raw, header) + copy(raw[len(header):], body) + + return raw +} -- cgit v1.3.1-10-gc9f91