sig
  type t
  module Pack :
    sig
      type format =
          ILLEGAL
        | BYTE
        | ASCII
        | SHORT
        | LONG
        | RATIONAL
        | SBYTE
        | UNDEFINED
        | SSHORT
        | SLONG
        | SRATIONAL
        | FLOAT
        | DOUBLE
      val string_of_format : Exif.Entry.Pack.format -> string
      type unpacked =
          Bytes of int array
        | Asciis of string
        | Shorts of int array
        | Longs of int64 array
        | Rationals of (int64 * int64) array
        | SBytes of int array
        | Undefined of string
        | SShorts of int array
        | SLongs of int32 array
        | SRationals of (int32 * int32) array
        | Floats of float array
        | Doubles of float array
      val unpack :
        Exif.Entry.Pack.format -> int -> string -> Exif.Entry.Pack.unpacked
      val format : Format.formatter -> Exif.Entry.Pack.unpacked -> unit
    end
  module Decoded :
    sig
      type t = {
        tag : int;
        format : Exif.Entry.Pack.format;
        components : int;
        data : string;
      }
    end
  val decode : Exif.Entry.t -> Exif.Entry.Decoded.t
  type unpacked_entry = Exif.Tag.t * Exif.Entry.Pack.unpacked
  val unpack : Exif.Entry.Decoded.t -> Exif.Entry.unpacked_entry
  val format_unpacked_entry :
    Exif.IFD.t ->
    Exifutil.Format.formatter ->
    Exif.Tag.t * Exif.Entry.Pack.unpacked -> unit
  val format :
    Exif.IFD.t -> Exifutil.Format.formatter -> Exif.Entry.t -> unit
end