sig
type 'a or_error = ('a, exn) Result.result
type 'a lwt_or_error = 'a Maki.or_error Lwt.t
type path = string
type program = string
type time = float
module Limit :
sig
type t
val create : int -> Maki.Limit.t
val acquire : Maki.Limit.t -> (unit -> 'a Lwt.t) -> 'a Lwt.t
val j : unit -> Maki.Limit.t
val set_j : int -> unit
end
module Value :
sig
type 'a ops = {
descr : string;
serialize :
[ `Fast of 'a -> Bencode.t | `Slow of 'a -> Bencode.t Lwt.t ];
unserialize : Bencode.t -> 'a Maki.or_error;
}
val make :
serialize:[ `Fast of 'a -> Bencode.t | `Slow of 'a -> Bencode.t Lwt.t ] ->
unserialize:(Bencode.t -> 'a Maki.or_error) ->
string -> 'a Maki.Value.ops
val make_fast :
serialize:('a -> Bencode.t) ->
unserialize:(Bencode.t -> 'a Maki.or_error) ->
string -> 'a Maki.Value.ops
val make_slow :
serialize:('a -> Bencode.t Lwt.t) ->
unserialize:(Bencode.t -> 'a Maki.or_error) ->
string -> 'a Maki.Value.ops
val serialize : 'a Maki.Value.ops -> 'a -> Bencode.t Lwt.t
val unserialize : 'a Maki.Value.ops -> Bencode.t -> 'a Maki.or_error
val to_string : 'a Maki.Value.ops -> 'a -> string Lwt.t
val of_string : 'a Maki.Value.ops -> string -> 'a Maki.or_error
val int : int Maki.Value.ops
val string : string Maki.Value.ops
val bool : bool Maki.Value.ops
val float : float Maki.Value.ops
val list : 'a Maki.Value.ops -> 'a list Maki.Value.ops
val assoc : 'a Maki.Value.ops -> (string * 'a) list Maki.Value.ops
val map :
?descr:string ->
('a -> 'b) -> ('b -> 'a) -> 'b Maki.Value.ops -> 'a Maki.Value.ops
val file : Maki.path Maki.Value.ops
val program : Maki.program Maki.Value.ops
val set : 'a Maki.Value.ops -> 'a list Maki.Value.ops
val marshal : string -> 'a Maki.Value.ops
val pair :
'a Maki.Value.ops -> 'b Maki.Value.ops -> ('a * 'b) Maki.Value.ops
val triple :
'a Maki.Value.ops ->
'b Maki.Value.ops ->
'c Maki.Value.ops -> ('a * 'b * 'c) Maki.Value.ops
val quad :
'a Maki.Value.ops ->
'b Maki.Value.ops ->
'c Maki.Value.ops ->
'd Maki.Value.ops -> ('a * 'b * 'c * 'd) Maki.Value.ops
type t = Value : 'a Maki.Value.ops * 'a -> Maki.Value.t
val argv0 : Maki.Value.t
val pack : 'a Maki.Value.ops -> 'a -> Maki.Value.t
val pack_int : int -> Maki.Value.t
val pack_string : string -> Maki.Value.t
val pack_bool : bool -> Maki.Value.t
val pack_file : Maki.path -> Maki.Value.t
val pack_list : 'a Maki.Value.ops -> 'a list -> Maki.Value.t
val pack_program : Maki.program -> Maki.Value.t
val pack_set : 'a Maki.Value.ops -> 'a list -> Maki.Value.t
val pack_assoc :
'a Maki.Value.ops -> (string * 'a) list -> Maki.Value.t
end
module Storage = Maki_storage
module Time :
sig
type t = Maki.time
val seconds : int -> Maki.Time.t
val hours : int -> Maki.Time.t
val minutes : int -> Maki.Time.t
val days : int -> Maki.Time.t
val now : unit -> Maki.Time.t
val ( ++ ) : Maki.Time.t -> Maki.Time.t -> Maki.Time.t
end
type lifetime =
[ `CanDrop | `Keep | `KeepFor of Maki.time | `KeepUntil of Maki.time ]
val call :
?bypass:bool ->
?storage:Storage.t ->
?lifetime:Maki.lifetime ->
?limit:Maki.Limit.t ->
?tags:string list ->
name:string ->
deps:Maki.Value.t list ->
op:'res Maki.Value.ops ->
(unit -> 'res Lwt.t) -> 'res Maki.or_error Lwt.t
val call_exn :
?bypass:bool ->
?storage:Storage.t ->
?lifetime:Maki.lifetime ->
?limit:Maki.Limit.t ->
?tags:string list ->
name:string ->
deps:Maki.Value.t list ->
op:'res Maki.Value.ops -> (unit -> 'res Lwt.t) -> 'res Lwt.t
type cache_value
val cache_value_of_bencode : Bencode.t -> Maki.cache_value Maki.or_error
val bencode_of_cache_value : Maki.cache_value -> Bencode.t
val cache_value_lifetime : Maki.cache_value -> Maki.lifetime
val cache_value_fun_name : Maki.cache_value -> string
val cache_value_deps : Maki.cache_value -> string list
val cache_value_data : Maki.cache_value -> string
val cache_value_tags : Maki.cache_value -> string list
type gc_stats = { gc_kept : int; gc_removed : int; }
val string_of_gc_stats : Maki.gc_stats -> string
val gc_storage :
?remove_file:bool -> Storage.t -> Maki.gc_stats Maki.or_error Lwt.t
val last_mtime : Maki.path -> Maki.time Maki.or_error
val sha1 : Maki.path -> Sha1.t Lwt.t
val sha1_of_string : string -> Sha1.t
val abspath : Maki.path -> Maki.path
val shell :
?timeout:float ->
?stdin:string -> string -> (string * string * int) Lwt.t
val shellf :
?timeout:float ->
?stdin:string ->
('a, Format.formatter, unit, (string * string * int) Lwt.t)
Pervasives.format4 -> 'a
end