package sihl

  1. Overview
  2. Docs

Lifecycle

Every service has a lifecycle, meaning it can be started and stopped. *

type lifecycle = {
  1. name : string;
  2. dependencies : unit -> lifecycle list;
  3. start : unit -> unit Lwt.t;
  4. stop : unit -> unit Lwt.t;
}
val create_lifecycle : ?dependencies:(unit -> lifecycle list) -> ?start:(unit -> unit Lwt.t) -> ?stop:(unit -> unit Lwt.t) -> string -> lifecycle

Service

A service has a start and stop functions and a lifecycle. *

module Service : sig ... end
val start_services : Service.t list -> lifecycle list Lwt.t

start_services lifecycles starts a list of service lifecycles. The order does not matter as the services are started in the order of their dependencies. (No service is started before its dependency)

val stop_services : Service.t list -> unit Lwt.t

stop_services ctx services stops a list of service lifecycles with a context ctx. The order does not matter as the services are stopped in the order of their dependencies. (No service is stopped after its dependency)

module Map : sig ... end
val collect_all_lifecycles : lifecycle list -> lifecycle Map.t
val top_sort_lifecycles : lifecycle list -> lifecycle list
val unpack : string -> ?default:'a -> 'a option Stdlib.ref -> 'a