Source file RFC5322.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let pp_date formatter (date : Date.t) : unit =
  let wday = Date.weekday date in
  let Date.Ymd'.{ year; month; day } = Date.Ymd'.view date in
  Format.fprintf formatter "%s, %02d %s %04d"
    (Date_time_utils.abbr_string_of_weekday wday)
    day
    (Option.get @@ Date_time_utils.abbr_string_of_month month)
    year

let pp_time formatter (time : Time.t) : unit =
  let { Time.hour; minute; second; _ } = Time.view time in
  Format.fprintf formatter "%02d:%02d:%02d" hour minute second

let pp_timestamp formatter (x : Span.t) =
  match Date_time.of_timestamp ~tz_of_date_time:Time_zone.utc x with
  | None -> invalid_arg "Invalid timestamp"
  | Some dt ->
    Format.fprintf formatter "%a %a"
      pp_date (Date_time.date dt)
      pp_time (Date_time.time dt)

let pp_date_time formatter (dt : Date_time.t) =
  match Date_time.to_timestamp dt with
  | `Ambiguous _ -> raise (Printers.Date_time_cannot_deduce_offset_from_utc dt)
  | `Single x -> pp_timestamp formatter x