aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-19 15:13:44 +0000
committerGravatar Runxi Yu2026-03-19 15:20:02 +0000
commit1a8842b33d6d83d1754267e087fd7b4f73ca9e91 (patch)
tree02149613c4caa929b959f930985c8ff8ff421a07 /object
parentTODO: Updates on receive-pack and error handling (diff)
signatureNo signature
object/stored: Use generics
Diffstat (limited to 'object')
-rw-r--r--object/stored/blob.go35
-rw-r--r--object/stored/commit.go32
-rw-r--r--object/stored/object.go14
-rw-r--r--object/stored/objectstored.go32
-rw-r--r--object/stored/stored.go31
-rw-r--r--object/stored/tree.go32
6 files changed, 31 insertions, 145 deletions
diff --git a/object/stored/blob.go b/object/stored/blob.go
deleted file mode 100644
index 4b3b6b74..00000000
--- a/object/stored/blob.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package stored
-
-import (
- "codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredBlob is a parsed blob paired with its storage ID.
-//
-// This Blob object is fully materialized in memory.
-// Consider using objectstore/Store.ReadReaderContent.
-type StoredBlob struct {
- id objectid.ObjectID
- blob *object.Blob
-}
-
-// NewStoredBlob creates one stored blob wrapper.
-func NewStoredBlob(id objectid.ObjectID, blob *object.Blob) *StoredBlob {
- return &StoredBlob{id: id, blob: blob}
-}
-
-// ID returns the object ID this blob was loaded from.
-func (stored *StoredBlob) ID() objectid.ObjectID {
- return stored.id
-}
-
-// Object returns the parsed blob as the generic object interface.
-func (stored *StoredBlob) Object() object.Object {
- return stored.blob
-}
-
-// Blob returns the parsed blob value.
-func (stored *StoredBlob) Blob() *object.Blob {
- return stored.blob
-}
diff --git a/object/stored/commit.go b/object/stored/commit.go
deleted file mode 100644
index 880ba40c..00000000
--- a/object/stored/commit.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package stored
-
-import (
- "codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredCommit is a parsed commit paired with its storage ID.
-type StoredCommit struct {
- id objectid.ObjectID
- commit *object.Commit
-}
-
-// NewStoredCommit creates one stored commit wrapper.
-func NewStoredCommit(id objectid.ObjectID, commit *object.Commit) *StoredCommit {
- return &StoredCommit{id: id, commit: commit}
-}
-
-// ID returns the object ID this commit was loaded from.
-func (stored *StoredCommit) ID() objectid.ObjectID {
- return stored.id
-}
-
-// Object returns the parsed commit as the generic object interface.
-func (stored *StoredCommit) Object() object.Object {
- return stored.commit
-}
-
-// Commit returns the parsed commit value.
-func (stored *StoredCommit) Commit() *object.Commit {
- return stored.commit
-}
diff --git a/object/stored/object.go b/object/stored/object.go
deleted file mode 100644
index c0a0db8f..00000000
--- a/object/stored/object.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package stored
-
-import (
- "codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredObject is a parsed object paired with its storage ID.
-type StoredObject interface {
- // ID returns the object ID the object was loaded from.
- ID() objectid.ObjectID
- // Object returns the parsed object value.
- Object() object.Object
-}
diff --git a/object/stored/objectstored.go b/object/stored/objectstored.go
deleted file mode 100644
index ff7d516a..00000000
--- a/object/stored/objectstored.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package stored
-
-import (
- "codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredTag is a parsed tag paired with its storage ID.
-type StoredTag struct {
- id objectid.ObjectID
- tag *object.Tag
-}
-
-// NewStoredTag creates one stored tag wrapper.
-func NewStoredTag(id objectid.ObjectID, tag *object.Tag) *StoredTag {
- return &StoredTag{id: id, tag: tag}
-}
-
-// ID returns the object ID this tag was loaded from.
-func (stored *StoredTag) ID() objectid.ObjectID {
- return stored.id
-}
-
-// Object returns the parsed tag as the generic object interface.
-func (stored *StoredTag) Object() object.Object {
- return stored.tag
-}
-
-// Tag returns the parsed tag value.
-func (stored *StoredTag) Tag() *object.Tag {
- return stored.tag
-}
diff --git a/object/stored/stored.go b/object/stored/stored.go
index 588b1726..3e0352d1 100644
--- a/object/stored/stored.go
+++ b/object/stored/stored.go
@@ -1,2 +1,33 @@
// Package stored wraps parsed objects with their storage object IDs.
+//
+// Stored values are typically instantiated with pointer object types such as
+// *object.Blob, *object.Tree, *object.Commit, or *object.Tag, because those
+// pointer types satisfy object.Object.
package stored
+
+import (
+ "codeberg.org/lindenii/furgit/object"
+ "codeberg.org/lindenii/furgit/objectid"
+)
+
+// Stored represents a stored object,
+// i.e., an object along with its object ID.
+type Stored[T object.Object] struct {
+ id objectid.ObjectID
+ obj T
+}
+
+// New creates one stored object wrapper.
+func New[T object.Object](id objectid.ObjectID, obj T) *Stored[T] {
+ return &Stored[T]{id: id, obj: obj}
+}
+
+// ID returns the object ID.
+func (stored *Stored[T]) ID() objectid.ObjectID {
+ return stored.id
+}
+
+// Object returns the wrapped object as itself.
+func (stored *Stored[T]) Object() T {
+ return stored.obj
+}
diff --git a/object/stored/tree.go b/object/stored/tree.go
deleted file mode 100644
index a54c1f6e..00000000
--- a/object/stored/tree.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package stored
-
-import (
- "codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredTree is a parsed tree paired with its storage ID.
-type StoredTree struct {
- id objectid.ObjectID
- tree *object.Tree
-}
-
-// NewStoredTree creates one stored tree wrapper.
-func NewStoredTree(id objectid.ObjectID, tree *object.Tree) *StoredTree {
- return &StoredTree{id: id, tree: tree}
-}
-
-// ID returns the object ID this tree was loaded from.
-func (stored *StoredTree) ID() objectid.ObjectID {
- return stored.id
-}
-
-// Object returns the parsed tree as the generic object interface.
-func (stored *StoredTree) Object() object.Object {
- return stored.tree
-}
-
-// Tree returns the parsed tree value.
-func (stored *StoredTree) Tree() *object.Tree {
- return stored.tree
-}