open Types type item = { msg : protocol_msg; transmits : int Kcas.Loc.t; created : Mtime.span; } type t val create : unit -> t val enqueue : t -> protocol_msg -> transmits:int -> created:Mtime.span -> limit:int -> unit val depth : t -> int val drain : t -> max_bytes:int -> encode_size:(protocol_msg -> int) -> protocol_msg list val invalidate : t -> invalidates:(newer:protocol_msg -> older:protocol_msg -> bool) -> protocol_msg -> unit