diff options
| author | Estevan Castilho <tevo@riajuu.net> | 2026-09-26 00:48:26 +0000 |
|---|---|---|
| committer | Estevan Castilho <tevo@riajuu.net> | 2026-09-26 00:48:26 +0000 |
| commit | c7b754e96714eeeb9d315ee3de402d73a27d47db (patch) | |
| tree | 274792f6cdb60387e9bd4b5b7508463b4228bc4a /lib/kernel/Multigroup.ml | |
| parent | b06d16a2eb0846799b3b039dee989cf1cb258b6a (diff) | |
| parent | 0ec1e8a052305f5246d7cd66e11300cd29bc6d64 (diff) | |
| download | RNT-c7b754e96714eeeb9d315ee3de402d73a27d47db.tar.gz RNT-c7b754e96714eeeb9d315ee3de402d73a27d47db.zip | |
Merge branch 'branch-registration'
Diffstat (limited to 'lib/kernel/Multigroup.ml')
| -rw-r--r-- | lib/kernel/Multigroup.ml | 25 |
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 |
