aboutsummaryrefslogtreecommitdiff
path: root/object/store/dual/dual.go
diff options
context:
space:
mode:
Diffstat (limited to 'object/store/dual/dual.go')
-rw-r--r--object/store/dual/dual.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/object/store/dual/dual.go b/object/store/dual/dual.go
new file mode 100644
index 00000000..627cc121
--- /dev/null
+++ b/object/store/dual/dual.go
@@ -0,0 +1,35 @@
+package dual
+
+import objectstore "codeberg.org/lindenii/furgit/object/store"
+
+type objectSide interface {
+ objectstore.Reader
+ objectstore.ObjectWriter
+ objectstore.ObjectQuarantiner
+}
+
+type packSide interface {
+ objectstore.Reader
+ objectstore.PackWriter
+ objectstore.PackQuarantiner
+}
+
+// Dual composes one object-wise store and one pack-wise store into one logical
+// object store.
+//
+// Reads are served from the combined object reader of both stores. Individual
+// object writes are routed to the object-wise store, and pack writes are routed
+// to the pack-wise store. Coordinated quarantines go across both stores.
+type Dual struct {
+ object objectSide
+ pack packSide
+ reader objectstore.Reader
+}
+
+var (
+ _ objectstore.Reader = (*Dual)(nil)
+ _ objectstore.ObjectWriter = (*Dual)(nil)
+ _ objectstore.PackWriter = (*Dual)(nil)
+ _ objectstore.ObjectQuarantiner = (*Dual)(nil)
+ _ objectstore.PackQuarantiner = (*Dual)(nil)
+)