package calculon

  1. Overview
  2. Docs

Source file Plugin_state.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(** {1 Manage state} *)

open Lwt_infix

type t = { actions: Plugin.action_callback }

let cmd_reload st =
  Command.make_simple ~descr:"reload state from disk" ~prio:10 ~cmd:"reload"
    (fun _ _ ->
      let+ () = Signal.Send_ref.send st.actions Plugin.Require_reload in
      Some (Talk.select Talk.Ack))

let cmd_save st =
  Command.make_simple ~descr:"save state to disk" ~prio:10 ~cmd:"save"
    (fun _ _ ->
      let+ () = Signal.Send_ref.send st.actions Plugin.Require_save in
      Some (Talk.select Talk.Ack))

let plugin =
  Plugin.stateful ~name:"state"
    ~of_json:(fun actions _ -> Ok { actions })
    ~to_json:(fun _ -> None)
    ~stop:(fun _ -> Lwt.return ())
    ~commands:(fun st -> [ cmd_reload st; cmd_save st ])
    ()
OCaml

Innovation. Community. Security.