sig
  type destination =
      TargetFile of string
    | StringBuffer of Buffer.t
    | ArrayBuffer of
        (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
        Bigarray.Array1.t
  type download = {
    destination : GapiMediaResource.destination;
    range_spec : string;
  }
  val destination :
    (GapiMediaResource.download, GapiMediaResource.destination) GapiLens.t
  val range_spec : (GapiMediaResource.download, string) GapiLens.t
  val create_out_channel :
    GapiMediaResource.download -> Netchannels.out_obj_channel
  val create_in_channel :
    ?discard_on_close:bool ->
    GapiMediaResource.download -> Netchannels.in_obj_channel
  val generate_download_headers :
    GapiMediaResource.download -> GapiCore.Header.t list
  val generate_range_spec : (int64 option * int64 option) list -> string
  type source =
      File of string
    | String of string
    | Buffer of
        (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
        Bigarray.Array1.t
  type t = {
    source : GapiMediaResource.source;
    name : string;
    content_type : string;
    content_length : int64;
  }
  val source : (GapiMediaResource.t, GapiMediaResource.source) GapiLens.t
  val name : (GapiMediaResource.t, string) GapiLens.t
  val content_type : (GapiMediaResource.t, string) GapiLens.t
  val content_length : (GapiMediaResource.t, int64) GapiLens.t
  type state = Request | Uploading | Done | Error
  type upload_state = {
    state : GapiMediaResource.state;
    resource : GapiMediaResource.t;
    chunk_size : int;
    current_offset : int64;
  }
  val state :
    (GapiMediaResource.upload_state, GapiMediaResource.state) GapiLens.t
  val resource :
    (GapiMediaResource.upload_state, GapiMediaResource.t) GapiLens.t
  val chunk_size : (GapiMediaResource.upload_state, int) GapiLens.t
  val current_offset : (GapiMediaResource.upload_state, int64) GapiLens.t
  val create_file_resource : string -> GapiMediaResource.t
  val setup_upload :
    ?chunk_size:int -> GapiMediaResource.t -> GapiMediaResource.upload_state
  val setup_file_upload :
    ?chunk_size:int -> string -> GapiMediaResource.upload_state
  val generate_upload_headers :
    GapiCore.HttpMethod.t ->
    GapiMediaResource.upload_state -> GapiCore.Header.t list
  val update_upload_state :
    string ->
    GapiMediaResource.upload_state -> GapiMediaResource.upload_state
  val get_post_data : GapiMediaResource.upload_state -> GapiCore.PostData.t
end