···11+// Package dual provides one logical object store backed by separate object-wise
22+// and pack-wise stores.
33+//
44+// Dual composes a store that handles individual object writes with a store that
55+// handles pack-wise writes, while exposing one mixed reader over both.
66+// Coordinated quarantine operations span both stores, but quarantine promotion
77+// is non-atomic.
88+package dual
+35
object/store/dual/dual.go
···11+package dual
22+33+import objectstore "codeberg.org/lindenii/furgit/object/store"
44+55+type objectSide interface {
66+ objectstore.Reader
77+ objectstore.ObjectWriter
88+ objectstore.ObjectQuarantiner
99+}
1010+1111+type packSide interface {
1212+ objectstore.Reader
1313+ objectstore.PackWriter
1414+ objectstore.PackQuarantiner
1515+}
1616+1717+// Dual composes one object-wise store and one pack-wise store into one logical
1818+// object store.
1919+//
2020+// Reads are served from the combined object reader of both stores. Individual
2121+// object writes are routed to the object-wise store, and pack writes are routed
2222+// to the pack-wise store. Coordinated quarantines go across both stores.
2323+type Dual struct {
2424+ object objectSide
2525+ pack packSide
2626+ reader objectstore.Reader
2727+}
2828+2929+var (
3030+ _ objectstore.Reader = (*Dual)(nil)
3131+ _ objectstore.ObjectWriter = (*Dual)(nil)
3232+ _ objectstore.PackWriter = (*Dual)(nil)
3333+ _ objectstore.ObjectQuarantiner = (*Dual)(nil)
3434+ _ objectstore.PackQuarantiner = (*Dual)(nil)
3535+)