package sihl-cache
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 45let 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))