Hive.Pubsub.Make
hive · API reference
Build a t capability from a transport module.
This functor is the extension point for users who bring their own pubsub transport while keeping servers value-oriented:
ocaml]
module Bus = Hive.Pubsub.Make (My_transport)
let pubsub = Bus.pubsub my_transport
let server = Counter.start ~sw ~clock ~pubsub specA tiny test transport can be only a table of callbacks:
ocaml]
module Test_transport = struct
type t = (string, (payload:string -> unit) list) Hashtbl.t
let publish t ~topic ~payload =
Hashtbl.find_opt t topic
|> Option.iter (List.iter (fun callback -> callback ~payload))
let subscribe t ~topic callback =
let callbacks = Option.value ~default:[] (Hashtbl.find_opt t topic) in
Hashtbl.replace t topic (callback :: callbacks);
fun () -> Hashtbl.remove t topic
end
module Test_pubsub = Hive.Pubsub.Make (Test_transport)A production adapter can hide richer resources behind its transport handle and still expose only the capability to Hive:
ocaml]
module Valkey_pubsub = Hive.Pubsub.Make (Hive_pubsub_valkey.Transport)
let transport =
Hive_pubsub_valkey.create ~sw ~net ~clock ~host:"127.0.0.1" ~port:6379 ()
let pubsub = Valkey_pubsub.pubsub transportParameters
module T : TRANSPORTSignature
val pubsub : T.t -> tpubsub transport adapts transport to the standard Hive capability.