add timestamp.ml
This commit is contained in:
parent
d760a54b61
commit
6962399dba
10 changed files with 113 additions and 121 deletions
39
src/api.ml
39
src/api.ml
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue