diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-09-26 22:09:11 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-09-26 22:09:11 -0300 |
| commit | 320954996e921d7b34eb61f462799b5c6ab8ee09 (patch) | |
| tree | 16697bc161faf27f0b4c1ba57f6fcc24d240801b /lib/sublanguage_context.ml | |
| parent | b555c28c7e6c315fc0394baf213ecb08b21ed959 (diff) | |
| download | Sakura-320954996e921d7b34eb61f462799b5c6ab8ee09.tar.gz Sakura-320954996e921d7b34eb61f462799b5c6ab8ee09.zip | |
new shrunk API for RNT on sakura
Diffstat (limited to 'lib/sublanguage_context.ml')
| -rw-r--r-- | lib/sublanguage_context.ml | 70 |
1 files changed, 1 insertions, 69 deletions
diff --git a/lib/sublanguage_context.ml b/lib/sublanguage_context.ml index df537a7..16b850e 100644 --- a/lib/sublanguage_context.ml +++ b/lib/sublanguage_context.ml @@ -1,69 +1 @@ -(** Execution context passed to every sublanguage. - - - [write_handle] NT branch handle; sublanguages use it for mutations - (create_relation, link_tuple, etc). Read-only sublanguages (DRL) ignore - it. - - - [branch] Structural view over the active branch — gives every executor - random-access to every multigroup bound to the branch via [mg_of]. Schema - lookups for an FQN [{mg; name}] use - [branch#mg_of mg |> Option.bind (fun m -> m#get_relation name)]. - - - [resolve] Builds an absolute RNT path for an FQN. Pass [~branch:b] to - address a relation on a different live branch (cross-multigroup reads). - - - [switch_branch] Closes the current branch and opens the named one, - returning the delta describing the new branch's mg set. Provided by the - listener so VCL does not need direct access to session state. *) - -type branch_view = - < name: string - ; tip: string - ; mg_of: string -> Management.Multigroup.multigroup option - ; multigroups: (string * Management.Multigroup.multigroup) list - ; add_multigroup: name:string -> unit - ; set_mg: name:string -> Management.Multigroup.multigroup -> unit - ; path: ?branch:string -> Qualified_name.t -> string > - -type t = - { write_handle: Nt.branch_handle; - branch: branch_view; - resolve: ?branch:string -> Qualified_name.t -> string; - switch_branch: string -> (Sublanguage_types.transition_delta, Condition.t) result; - session_hash: string - (** RNT session hash owning this connection. Session-scoped ephemeral - relations (with DML [Define]) register under - /system/sessions/<session_hash>/ephemeral/<name>. *) - } - -(** Absolute RNT path of a session-scoped ephemeral relation. An unqualified - name in a DRL [Base] resolves here: named bindings shadow nothing since - stored relations always carry an [mg:] qualifier. *) -let ephemeral_path (ctx : t) (name : string) : string = - "/system/sessions/" ^ ctx.session_hash ^ "/ephemeral/" ^ name - -module Make (NT : Nt.S) = struct - module Session = Session.Make (NT) - module Branch = Branch.Make (NT) - - let make_ctx (session : Session.session) (claims : string) : t = - let br = session#branch in - { write_handle= br#branch_handle; - branch= (br :> branch_view); - resolve= br#path; - session_hash= session#id; - switch_branch= - (fun name -> - match br#close () with - | Error e -> Error e - | Ok () -> - begin match Branch.open_branch claims name with - | Error e -> - begin match Branch.open_branch claims "master" with - | Ok mbr -> session#set_branch mbr - | Error _ -> () - end; - Error e - | Ok new_br -> session#set_branch new_br; Ok new_br#multigroups - end ) } -end +type t = {kernel: RNT.kernel; session: Session.session} |
