package sihl-cache

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file sihl_cache.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
let log_src = Logs.Src.create ("sihl.service." ^ Sihl.Contract.Cache.name)

module Logs = (val Logs.src_log log_src : Logs.LOG)

module MakeSql (Repo : Repo_sql.Sig) : Sihl.Contract.Cache.Sig = struct
  let find = Repo.find

  let set ?ctx (k, v) =
    match v with
    | Some v ->
      (match%lwt find k with
      | Some _ -> Repo.update ?ctx (k, v)
      | None -> Repo.insert ?ctx (k, v))
    | None ->
      (match%lwt find k with
      | Some _ -> Repo.delete ?ctx k
      | None ->
        (* nothing to do *)
        Lwt.return ())
  ;;

  (* Lifecycle *)

  let start () = Lwt.return ()
  let stop () = Lwt.return ()

  let lifecycle =
    Sihl.Container.create_lifecycle
      Sihl.Contract.Cache.name
      ~dependencies:(fun () -> Repo.lifecycles)
      ~start
      ~stop
  ;;

  let register () =
    Repo.register_migration ();
    Repo.register_cleaner ();
    Sihl.Container.Service.create lifecycle
  ;;
end

module PostgreSql =
  MakeSql (Repo_sql.MakePostgreSql (Sihl.Database.Migration.PostgreSql))

module MariaDb = MakeSql (Repo_sql.MakeMariaDb (Sihl.Database.Migration.MariaDb))
OCaml

Innovation. Community. Security.