My agentic slop goes here. Not intended for anyone else!
1(** Cache entry information *) 2 3type t = { 4 key : string; 5 size : int64; 6 mtime : float; 7 ttl : float option; 8 flags : Flags.t; 9} 10 11let create ~key ~size ~mtime ~ttl ~flags = 12 { key; size; mtime; ttl; flags } 13 14let key t = t.key 15let size t = t.size 16let mtime t = t.mtime 17let ttl t = t.ttl 18let flags t = t.flags 19 20let is_expired t = 21 match t.ttl with 22 | None -> false 23 | Some expiry -> Unix.time () > expiry 24 25let is_pinned t = 26 Flags.is_pinned t.flags 27 28let is_stale t = 29 Flags.is_stale t.flags 30 31let is_temporary t = 32 Flags.is_temporary t.flags 33 34let compare_by_mtime a b = 35 Float.compare a.mtime b.mtime 36 37let compare_by_size a b = 38 Int64.compare a.size b.size 39 40let pp fmt t = 41 Format.fprintf fmt "Entry{key=%s, size=%Ld, mtime=%.1f, ttl=%s, flags=%a}" 42 t.key 43 t.size 44 t.mtime 45 (match t.ttl with 46 | None -> "never" 47 | Some exp -> Printf.sprintf "%.1f" exp) 48 Flags.pp t.flags 49 50(* Jsont support *) 51 52(* Helper codec for int64 *) 53let int64_jsont = 54 let kind = "Int64" in 55 let doc = "64-bit integer as number" in 56 let dec n = Int64.of_float n in 57 let enc i = Int64.to_float i in 58 Jsont.map ~kind ~doc ~dec ~enc Jsont.number 59 60let jsont = 61 let kind = "Entry" in 62 let doc = "A cache entry" in 63 let make key size mtime ttl flags = { key; size; mtime; ttl; flags } in 64 Jsont.Object.map ~kind ~doc make 65 |> Jsont.Object.mem "key" Jsont.string ~enc:key 66 |> Jsont.Object.mem "size" int64_jsont ~enc:size 67 |> Jsont.Object.mem "mtime" Jsont.number ~enc:mtime 68 |> Jsont.Object.opt_mem "ttl" Jsont.number ~enc:ttl 69 |> Jsont.Object.mem "flags" Flags.jsont ~enc:flags 70 |> Jsont.Object.finish