Utilities functions used by the parser and serializer
@spec from_date(DateTime.t()) :: integer()
@spec parse_header(binary()) :: {String.t(), binary(), binary()}
@spec to_date(integer()) :: DateTime.t()
@spec try_parse_header(binary()) :: {:ok, {String.t(), header_size :: integer(), content_size :: integer(), remaining :: binary()}} | {:error, :not_enough_data}