add timestamp.ml

This commit is contained in:
swrup 2025-11-28 16:57:48 +01:00
parent d760a54b61
commit 6962399dba
10 changed files with 113 additions and 121 deletions

View file

@ -44,45 +44,6 @@ end = struct
let jsont = Jsont.of_of_string ~kind:"HashCode" B32.decode ~enc:B32.encode
end
module Timestamp = struct
type t =
| Seconds of float
| Never
(* TODO time
- time.ml
- check this
- what value for never?
- better way for conversion to bin_types? *)
let to_int64 t = match t with Never -> 0_L | Seconds v -> Int64.of_float v
let to_ptime t = Util.ptime_of_int64 @@ to_int64 t
let of_ptime p = Seconds (Ptime.to_float_s p)
let number_or_never_jsont =
let never =
let dec s =
match s with
| "never" -> Never
| _ -> Jsont.Error.msg Jsont.Meta.none "unexpected string value"
in
let enc = function Never -> "never" | _ -> assert false in
Jsont.map ~dec ~enc Jsont.string
in
let number =
let dec n = Seconds n in
let enc = function Seconds n -> n | _ -> assert false in
Jsont.map ~dec ~enc Jsont.number
in
let enc = function Never -> never | Seconds _ -> number in
Jsont.any ~dec_string:never ~dec_number:number ~enc ()
let jsont =
let make t_s = t_s in
Jsont.Object.map ~kind:"Timestamp" make
|> Jsont.Object.mem "t_s" number_or_never_jsont ~enc:Fun.id
|> Jsont.Object.finish
end
module RelativeTime = struct
type t =
| Microseconds of float