sig
  type day = Rfc5322.day = Mon | Tue | Wed | Thu | Fri | Sat | Sun
  type month =
    Rfc5322.month =
      Jan
    | Feb
    | Mar
    | Apr
    | May
    | Jun
    | Jul
    | Aug
    | Sep
    | Oct
    | Nov
    | Dec
  type zone =
    Rfc5322.zone =
      UT
    | GMT
    | EST
    | EDT
    | CST
    | CDT
    | MST
    | MDT
    | PST
    | PDT
    | Military_zone of char
    | TZ of int
  type date =
    Rfc5322.date = {
    day : day option;
    date : int * month * int;
    time : int * int * int option;
    zone : zone;
  }
  val pp_zone : Format.formatter -> zone -> unit
  val pp_month : Format.formatter -> month -> unit
  val pp_day : Format.formatter -> day -> unit
  val pp : Format.formatter -> date -> unit
  module Encoder :
    sig
      val w_day :
        (day,
         ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)
         Encoder.partial)
        Wrap.k1
      val w_time :
        (int * int * int option,
         ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)
         Encoder.partial)
        Wrap.k1
      val w_zone :
        (zone,
         ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)
         Encoder.partial)
        Wrap.k1
      val w_date :
        (date,
         ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)
         Encoder.partial)
        Wrap.k1
    end
  module Decoder :
    sig
      val p_hour : int MrMime_parser.t
      val p_minute : int MrMime_parser.t
      val p_second : int MrMime_parser.t
      val p_year : int MrMime_parser.t
      val p_day : int MrMime_parser.t
      val p_month : month MrMime_parser.t
      val p_day_of_week : day MrMime_parser.t
      val p_zone : zone MrMime_parser.t
      val p_time : ((int * int * int option) * zone) MrMime_parser.t
      val p_date : (int * month * int) MrMime_parser.t
      val p_date_time : date MrMime_parser.t
    end
  val to_string : date -> string
  val of_string : ?chunk:int -> string -> date option
  val of_string_raw :
    ?chunk:int -> string -> int -> int -> (date * int) option
  val equal : date -> date -> bool
end