aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/Multigroup.ml
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-09-26 00:48:26 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-09-26 00:48:26 +0000
commitc7b754e96714eeeb9d315ee3de402d73a27d47db (patch)
tree274792f6cdb60387e9bd4b5b7508463b4228bc4a /lib/kernel/Multigroup.ml
parentb06d16a2eb0846799b3b039dee989cf1cb258b6a (diff)
parent0ec1e8a052305f5246d7cd66e11300cd29bc6d64 (diff)
downloadRNT-c7b754e96714eeeb9d315ee3de402d73a27d47db.tar.gz
RNT-c7b754e96714eeeb9d315ee3de402d73a27d47db.zip
Merge branch 'branch-registration'
Diffstat (limited to 'lib/kernel/Multigroup.ml')
-rw-r--r--lib/kernel/Multigroup.ml25
1 files changed, 19 insertions, 6 deletions
diff --git a/lib/kernel/Multigroup.ml b/lib/kernel/Multigroup.ml
index 685c8c7..c8ffa62 100644
--- a/lib/kernel/Multigroup.ml
+++ b/lib/kernel/Multigroup.ml
@@ -38,23 +38,28 @@ module Make (S : Abstract.Storage.STORAGE) = struct
let encode = Representation.to_blob
let decode = Representation.of_blob
- class multigroup conn value node = object
+ class multigroup conn value node = object (self)
inherit Lifecycle.null
+ method to_string = "multigroup"
+
val multigroup = value
val storage = conn
val node = node (* FIXME: see the comment on Branch.ml *)
method protocols : Protocols.Handle.protocol list =
- [ Prototype.Directory.of_properties
- [ "relation", Prototype.mixture
- [ RMDirectory.make
- ~storage ~node
- ~constructor:(R.wrap storage) ] ] ]
+ Protocols.[ Addressable.make self;
+ Prototype.Directory.of_properties
+ [ "relation", Prototype.mixture
+ [ RMDirectory.make
+ ~storage ~node
+ ~constructor:(R.wrap storage) ] ] ]
method hash =
Representation.to_blob multigroup
|> Concepts.Hash.hash_of_blob
+
+ method address = self#hash
end
let wrap conn value =
@@ -62,4 +67,12 @@ module Make (S : Abstract.Storage.STORAGE) = struct
let* node = SI.with_transaction conn (fun tx -> RelationM.find tx value.relations)
|> fmap (Option.to_result ~none:(Error.incomplete_multigroup value.relations)) in
new multigroup conn value node |> Protocols.Handle.make |> Result.ok
+
+ let make conn =
+ let open Utilities.Result in
+ SI.with_transaction conn (fun tx ->
+ let* empty = RelationM.empty_under tx in
+ let multigroup = { relations = empty } in
+ let* _ = SI.store_blob tx (Representation.to_blob multigroup) in
+ new multigroup conn multigroup RelationM.empty |> Protocols.Handle.make |> Result.ok)
end