diff options
| author | 2026-06-07 20:05:17 +0000 | |
|---|---|---|
| committer | 2026-06-07 20:05:17 +0000 | |
| commit | a333aad3b26a7e48c9d31b493c5f971ddc0c09c1 (patch) | |
| tree | c060bb206951cfd3044df680600aaa18170023cb /object/store/memory/reader.go | |
| parent | object/store/dual: Add (diff) | |
object/store/memory: Add
Diffstat (limited to 'object/store/memory/reader.go')
| -rw-r--r-- | object/store/memory/reader.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/object/store/memory/reader.go b/object/store/memory/reader.go new file mode 100644 index 00000000..19723a6c --- /dev/null +++ b/object/store/memory/reader.go @@ -0,0 +1,79 @@ +package memory + +import ( + "bytes" + "io" + + "lindenii.org/go/furgit/object/header" + "lindenii.org/go/furgit/object/id" + "lindenii.org/go/furgit/object/store" + "lindenii.org/go/furgit/object/typ" +) + +// ReadBytesFull reads one full object, including the object header. +func (memory *Memory) ReadBytesFull(id id.ObjectID) ([]byte, error) { + obj, ok := memory.objects.Load(id) + if !ok { + return nil, store.ErrObjectNotFound + } + + raw := header.Append(nil, obj.ty, uint64(len(obj.content))) + raw = append(raw, obj.content...) + + return raw, nil +} + +// ReadBytesContent reads one object body. +func (memory *Memory) ReadBytesContent(id id.ObjectID) (typ.Type, []byte, error) { + obj, ok := memory.objects.Load(id) + if !ok { + return typ.TypeUnknown, nil, store.ErrObjectNotFound + } + + return obj.ty, append([]byte(nil), obj.content...), nil +} + +// ReadHeader reads one object header. +func (memory *Memory) ReadHeader(id id.ObjectID) (typ.Type, uint64, error) { + obj, ok := memory.objects.Load(id) + if !ok { + return typ.TypeUnknown, 0, store.ErrObjectNotFound + } + + return obj.ty, uint64(len(obj.content)), nil +} + +// ReadSize reads one object size. +func (memory *Memory) ReadSize(id id.ObjectID) (uint64, error) { + _, size, err := memory.ReadHeader(id) + if err != nil { + return 0, err + } + + return size, nil +} + +// ReadReaderFull reads one full object through a reader. +func (memory *Memory) ReadReaderFull(id id.ObjectID) (io.ReadCloser, error) { + raw, err := memory.ReadBytesFull(id) + if err != nil { + return nil, err + } + + return io.NopCloser(bytes.NewReader(raw)), nil +} + +// ReadReaderContent reads one object body through a reader. +func (memory *Memory) ReadReaderContent(id id.ObjectID) (typ.Type, uint64, io.ReadCloser, error) { + ty, content, err := memory.ReadBytesContent(id) + if err != nil { + return typ.TypeUnknown, 0, nil, err + } + + return ty, uint64(len(content)), io.NopCloser(bytes.NewReader(content)), nil +} + +// Refresh is a no-op for in-memory object stores. +func (memory *Memory) Refresh() error { + return nil +} |
