aboutsummaryrefslogtreecommitdiff
path: root/object/store/memory
diff options
context:
space:
mode:
Diffstat (limited to 'object/store/memory')
-rw-r--r--object/store/memory/reader.go22
-rw-r--r--object/store/memory/writer.go18
-rw-r--r--object/store/memory/writer_test.go18
3 files changed, 27 insertions, 31 deletions
diff --git a/object/store/memory/reader.go b/object/store/memory/reader.go
index 19723a6c..e04ad759 100644
--- a/object/store/memory/reader.go
+++ b/object/store/memory/reader.go
@@ -17,34 +17,36 @@ func (memory *Memory) ReadBytesFull(id id.ObjectID) ([]byte, error) {
return nil, store.ErrObjectNotFound
}
- raw := header.Append(nil, obj.ty, uint64(len(obj.content)))
+ raw := header.Append(nil, obj.ty, len(obj.content))
raw = append(raw, obj.content...)
return raw, nil
}
// ReadBytesContent reads one object body.
+//
+// The returned slice aliases the store's own copy of the object content.
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 typ.Unknown, nil, store.ErrObjectNotFound
}
- return obj.ty, append([]byte(nil), obj.content...), nil
+ return obj.ty, obj.content, nil
}
// ReadHeader reads one object header.
-func (memory *Memory) ReadHeader(id id.ObjectID) (typ.Type, uint64, error) {
+func (memory *Memory) ReadHeader(id id.ObjectID) (typ.Type, int, error) {
obj, ok := memory.objects.Load(id)
if !ok {
- return typ.TypeUnknown, 0, store.ErrObjectNotFound
+ return typ.Unknown, 0, store.ErrObjectNotFound
}
- return obj.ty, uint64(len(obj.content)), nil
+ return obj.ty, len(obj.content), nil
}
// ReadSize reads one object size.
-func (memory *Memory) ReadSize(id id.ObjectID) (uint64, error) {
+func (memory *Memory) ReadSize(id id.ObjectID) (int, error) {
_, size, err := memory.ReadHeader(id)
if err != nil {
return 0, err
@@ -64,13 +66,13 @@ func (memory *Memory) ReadReaderFull(id id.ObjectID) (io.ReadCloser, error) {
}
// ReadReaderContent reads one object body through a reader.
-func (memory *Memory) ReadReaderContent(id id.ObjectID) (typ.Type, uint64, io.ReadCloser, error) {
+func (memory *Memory) ReadReaderContent(id id.ObjectID) (typ.Type, int, io.ReadCloser, error) {
ty, content, err := memory.ReadBytesContent(id)
if err != nil {
- return typ.TypeUnknown, 0, nil, err
+ return typ.Unknown, 0, nil, err
}
- return ty, uint64(len(content)), io.NopCloser(bytes.NewReader(content)), nil
+ return ty, len(content), io.NopCloser(bytes.NewReader(content)), nil
}
// Refresh is a no-op for in-memory object stores.
diff --git a/object/store/memory/writer.go b/object/store/memory/writer.go
index 185b082b..d76a1f41 100644
--- a/object/store/memory/writer.go
+++ b/object/store/memory/writer.go
@@ -8,12 +8,11 @@ import (
"lindenii.org/go/furgit/object/id"
"lindenii.org/go/furgit/object/store"
"lindenii.org/go/furgit/object/typ"
- "lindenii.org/go/lgo/intconv"
)
// WriteBytesContent writes one typed object content byte slice.
func (memory *Memory) WriteBytesContent(ty typ.Type, content []byte) (id.ObjectID, error) {
- raw := header.Append(nil, ty, uint64(len(content)))
+ raw := header.Append(nil, ty, len(content))
raw = append(raw, content...)
objectID := memory.objectFormat.Sum(raw)
@@ -30,7 +29,7 @@ func (memory *Memory) WriteBytesFull(raw []byte) (id.ObjectID, error) {
}
content := raw[consumed:]
- if uint64(len(content)) != size {
+ if len(content) != size {
return id.ObjectID{}, fmt.Errorf("%w: header size/content mismatch", store.ErrInvalidObject)
}
@@ -38,21 +37,16 @@ func (memory *Memory) WriteBytesFull(raw []byte) (id.ObjectID, error) {
}
// WriteReaderContent writes one typed object content stream.
-func (memory *Memory) WriteReaderContent(ty typ.Type, size uint64, src io.Reader) (id.ObjectID, error) {
- limit, err := intconv.Uint64ToInt64(size)
- if err != nil {
- return id.ObjectID{}, fmt.Errorf("object/store/memory: content size: %w", err)
- }
-
- content, err := io.ReadAll(io.LimitReader(src, limit+1))
+func (memory *Memory) WriteReaderContent(ty typ.Type, size int, src io.Reader) (id.ObjectID, error) {
+ content, err := io.ReadAll(io.LimitReader(src, int64(size)+1))
if err != nil {
return id.ObjectID{}, fmt.Errorf("object/store/memory: read content: %w", err)
}
switch {
- case uint64(len(content)) > size:
+ case len(content) > size:
return id.ObjectID{}, fmt.Errorf("%w: content longer than declared size", store.ErrInvalidObject)
- case uint64(len(content)) < size:
+ case len(content) < size:
return id.ObjectID{}, fmt.Errorf("%w: content shorter than declared size", store.ErrInvalidObject)
}
diff --git a/object/store/memory/writer_test.go b/object/store/memory/writer_test.go
index e68e1671..ad0d8722 100644
--- a/object/store/memory/writer_test.go
+++ b/object/store/memory/writer_test.go
@@ -19,9 +19,9 @@ func TestWriteReaderContent(t *testing.T) {
store := memory.New(objectFormat)
content := []byte("memory-content\n")
- raw := append(header.Append(nil, typ.TypeBlob, uint64(len(content))), content...)
+ raw := append(header.Append(nil, typ.Blob, len(content)), content...)
- gotID, err := store.WriteReaderContent(typ.TypeBlob, uint64(len(content)), bytes.NewReader(content))
+ gotID, err := store.WriteReaderContent(typ.Blob, len(content), bytes.NewReader(content))
if err != nil {
t.Fatalf("WriteReaderContent: %v", err)
}
@@ -36,8 +36,8 @@ func TestWriteReaderContent(t *testing.T) {
t.Fatalf("ReadBytesContent: %v", err)
}
- if gotType != typ.TypeBlob {
- t.Fatalf("ReadBytesContent type = %v, want %v", gotType, typ.TypeBlob)
+ if gotType != typ.Blob {
+ t.Fatalf("ReadBytesContent type = %v, want %v", gotType, typ.Blob)
}
if !bytes.Equal(gotContent, content) {
@@ -56,7 +56,7 @@ func TestWriteReaderFull(t *testing.T) {
store := memory.New(objectFormat)
content := []byte("memory-full\n")
- raw := append(header.Append(nil, typ.TypeBlob, uint64(len(content))), content...)
+ raw := append(header.Append(nil, typ.Blob, len(content)), content...)
gotID, err := store.WriteReaderFull(bytes.NewReader(raw))
if err != nil {
@@ -89,9 +89,9 @@ func TestWriteBytes(t *testing.T) {
store := memory.New(objectFormat)
content := []byte("memory-bytes\n")
- raw := append(header.Append(nil, typ.TypeBlob, uint64(len(content))), content...)
+ raw := append(header.Append(nil, typ.Blob, len(content)), content...)
- gotID, err := store.WriteBytesContent(typ.TypeBlob, content)
+ gotID, err := store.WriteBytesContent(typ.Blob, content)
if err != nil {
t.Fatalf("WriteBytesContent: %v", err)
}
@@ -123,7 +123,7 @@ func TestWriteValidationErrors(t *testing.T) {
{
name: "content overflow",
run: func(store *memory.Memory) error {
- _, err := store.WriteReaderContent(typ.TypeBlob, 1, bytes.NewReader([]byte("hello")))
+ _, err := store.WriteReaderContent(typ.Blob, 1, bytes.NewReader([]byte("hello")))
return err //nolint:wrapcheck
},
@@ -131,7 +131,7 @@ func TestWriteValidationErrors(t *testing.T) {
{
name: "content short",
run: func(store *memory.Memory) error {
- _, err := store.WriteReaderContent(typ.TypeBlob, 5, bytes.NewReader([]byte("x")))
+ _, err := store.WriteReaderContent(typ.Blob, 5, bytes.NewReader([]byte("x")))
return err //nolint:wrapcheck
},