sig
  module MessagePartHeader :
    sig
      type t = { name : string; value : string; }
      val name : (GapiGmailV1Model.MessagePartHeader.t, string) GapiLens.t
      val value : (GapiGmailV1Model.MessagePartHeader.t, string) GapiLens.t
      val empty : GapiGmailV1Model.MessagePartHeader.t
      val render :
        GapiGmailV1Model.MessagePartHeader.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.MessagePartHeader.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.MessagePartHeader.t
      val to_data_model :
        GapiGmailV1Model.MessagePartHeader.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.MessagePartHeader.t
    end
  module MessagePartBody :
    sig
      type t = { attachmentId : string; data : string; size : int; }
      val attachmentId :
        (GapiGmailV1Model.MessagePartBody.t, string) GapiLens.t
      val data : (GapiGmailV1Model.MessagePartBody.t, string) GapiLens.t
      val size : (GapiGmailV1Model.MessagePartBody.t, int) GapiLens.t
      val empty : GapiGmailV1Model.MessagePartBody.t
      val render :
        GapiGmailV1Model.MessagePartBody.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.MessagePartBody.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.MessagePartBody.t
      val to_data_model :
        GapiGmailV1Model.MessagePartBody.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.MessagePartBody.t
    end
  module MessagePart :
    sig
      type t = {
        body : GapiGmailV1Model.MessagePartBody.t;
        filename : string;
        headers : GapiGmailV1Model.MessagePartHeader.t list;
        mimeType : string;
        partId : string;
        parts : GapiGmailV1Model.MessagePart.t list;
      }
      val body :
        (GapiGmailV1Model.MessagePart.t, GapiGmailV1Model.MessagePartBody.t)
        GapiLens.t
      val filename : (GapiGmailV1Model.MessagePart.t, string) GapiLens.t
      val headers :
        (GapiGmailV1Model.MessagePart.t,
         GapiGmailV1Model.MessagePartHeader.t list)
        GapiLens.t
      val mimeType : (GapiGmailV1Model.MessagePart.t, string) GapiLens.t
      val partId : (GapiGmailV1Model.MessagePart.t, string) GapiLens.t
      val parts :
        (GapiGmailV1Model.MessagePart.t, GapiGmailV1Model.MessagePart.t list)
        GapiLens.t
      val empty : GapiGmailV1Model.MessagePart.t
      val render :
        GapiGmailV1Model.MessagePart.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.MessagePart.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.MessagePart.t
      val to_data_model :
        GapiGmailV1Model.MessagePart.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.MessagePart.t
    end
  module Message :
    sig
      type t = {
        historyId : string;
        id : string;
        internalDate : int64;
        labelIds : string list;
        payload : GapiGmailV1Model.MessagePart.t;
        raw : string;
        sizeEstimate : int;
        snippet : string;
        threadId : string;
      }
      val historyId : (GapiGmailV1Model.Message.t, string) GapiLens.t
      val id : (GapiGmailV1Model.Message.t, string) GapiLens.t
      val internalDate : (GapiGmailV1Model.Message.t, int64) GapiLens.t
      val labelIds : (GapiGmailV1Model.Message.t, string list) GapiLens.t
      val payload :
        (GapiGmailV1Model.Message.t, GapiGmailV1Model.MessagePart.t)
        GapiLens.t
      val raw : (GapiGmailV1Model.Message.t, string) GapiLens.t
      val sizeEstimate : (GapiGmailV1Model.Message.t, int) GapiLens.t
      val snippet : (GapiGmailV1Model.Message.t, string) GapiLens.t
      val threadId : (GapiGmailV1Model.Message.t, string) GapiLens.t
      val empty : GapiGmailV1Model.Message.t
      val render :
        GapiGmailV1Model.Message.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.Message.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.Message.t
      val to_data_model :
        GapiGmailV1Model.Message.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.Message.t
    end
  module HistoryLabelRemoved :
    sig
      type t = {
        labelIds : string list;
        message : GapiGmailV1Model.Message.t;
      }
      val labelIds :
        (GapiGmailV1Model.HistoryLabelRemoved.t, string list) GapiLens.t
      val message :
        (GapiGmailV1Model.HistoryLabelRemoved.t, GapiGmailV1Model.Message.t)
        GapiLens.t
      val empty : GapiGmailV1Model.HistoryLabelRemoved.t
      val render :
        GapiGmailV1Model.HistoryLabelRemoved.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.HistoryLabelRemoved.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryLabelRemoved.t
      val to_data_model :
        GapiGmailV1Model.HistoryLabelRemoved.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryLabelRemoved.t
    end
  module ModifyThreadRequest :
    sig
      type t = { addLabelIds : string list; removeLabelIds : string list; }
      val addLabelIds :
        (GapiGmailV1Model.ModifyThreadRequest.t, string list) GapiLens.t
      val removeLabelIds :
        (GapiGmailV1Model.ModifyThreadRequest.t, string list) GapiLens.t
      val empty : GapiGmailV1Model.ModifyThreadRequest.t
      val render :
        GapiGmailV1Model.ModifyThreadRequest.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ModifyThreadRequest.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ModifyThreadRequest.t
      val to_data_model :
        GapiGmailV1Model.ModifyThreadRequest.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ModifyThreadRequest.t
    end
  module Label :
    sig
      type t = {
        id : string;
        labelListVisibility : string;
        messageListVisibility : string;
        messagesTotal : int;
        messagesUnread : int;
        name : string;
        threadsTotal : int;
        threadsUnread : int;
        _type : string;
      }
      val id : (GapiGmailV1Model.Label.t, string) GapiLens.t
      val labelListVisibility : (GapiGmailV1Model.Label.t, string) GapiLens.t
      val messageListVisibility :
        (GapiGmailV1Model.Label.t, string) GapiLens.t
      val messagesTotal : (GapiGmailV1Model.Label.t, int) GapiLens.t
      val messagesUnread : (GapiGmailV1Model.Label.t, int) GapiLens.t
      val name : (GapiGmailV1Model.Label.t, string) GapiLens.t
      val threadsTotal : (GapiGmailV1Model.Label.t, int) GapiLens.t
      val threadsUnread : (GapiGmailV1Model.Label.t, int) GapiLens.t
      val _type : (GapiGmailV1Model.Label.t, string) GapiLens.t
      val empty : GapiGmailV1Model.Label.t
      val render : GapiGmailV1Model.Label.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.Label.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.Label.t
      val to_data_model :
        GapiGmailV1Model.Label.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.Label.t
    end
  module Profile :
    sig
      type t = {
        emailAddress : string;
        historyId : string;
        messagesTotal : int;
        threadsTotal : int;
      }
      val emailAddress : (GapiGmailV1Model.Profile.t, string) GapiLens.t
      val historyId : (GapiGmailV1Model.Profile.t, string) GapiLens.t
      val messagesTotal : (GapiGmailV1Model.Profile.t, int) GapiLens.t
      val threadsTotal : (GapiGmailV1Model.Profile.t, int) GapiLens.t
      val empty : GapiGmailV1Model.Profile.t
      val render :
        GapiGmailV1Model.Profile.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.Profile.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.Profile.t
      val to_data_model :
        GapiGmailV1Model.Profile.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.Profile.t
    end
  module ModifyMessageRequest :
    sig
      type t = { addLabelIds : string list; removeLabelIds : string list; }
      val addLabelIds :
        (GapiGmailV1Model.ModifyMessageRequest.t, string list) GapiLens.t
      val removeLabelIds :
        (GapiGmailV1Model.ModifyMessageRequest.t, string list) GapiLens.t
      val empty : GapiGmailV1Model.ModifyMessageRequest.t
      val render :
        GapiGmailV1Model.ModifyMessageRequest.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ModifyMessageRequest.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ModifyMessageRequest.t
      val to_data_model :
        GapiGmailV1Model.ModifyMessageRequest.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ModifyMessageRequest.t
    end
  module Thread :
    sig
      type t = {
        historyId : string;
        id : string;
        messages : GapiGmailV1Model.Message.t list;
        snippet : string;
      }
      val historyId : (GapiGmailV1Model.Thread.t, string) GapiLens.t
      val id : (GapiGmailV1Model.Thread.t, string) GapiLens.t
      val messages :
        (GapiGmailV1Model.Thread.t, GapiGmailV1Model.Message.t list)
        GapiLens.t
      val snippet : (GapiGmailV1Model.Thread.t, string) GapiLens.t
      val empty : GapiGmailV1Model.Thread.t
      val render : GapiGmailV1Model.Thread.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.Thread.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.Thread.t
      val to_data_model :
        GapiGmailV1Model.Thread.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.Thread.t
    end
  module WatchResponse :
    sig
      type t = { expiration : int64; historyId : string; }
      val expiration : (GapiGmailV1Model.WatchResponse.t, int64) GapiLens.t
      val historyId : (GapiGmailV1Model.WatchResponse.t, string) GapiLens.t
      val empty : GapiGmailV1Model.WatchResponse.t
      val render :
        GapiGmailV1Model.WatchResponse.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.WatchResponse.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.WatchResponse.t
      val to_data_model :
        GapiGmailV1Model.WatchResponse.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.WatchResponse.t
    end
  module HistoryLabelAdded :
    sig
      type t = {
        labelIds : string list;
        message : GapiGmailV1Model.Message.t;
      }
      val labelIds :
        (GapiGmailV1Model.HistoryLabelAdded.t, string list) GapiLens.t
      val message :
        (GapiGmailV1Model.HistoryLabelAdded.t, GapiGmailV1Model.Message.t)
        GapiLens.t
      val empty : GapiGmailV1Model.HistoryLabelAdded.t
      val render :
        GapiGmailV1Model.HistoryLabelAdded.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.HistoryLabelAdded.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryLabelAdded.t
      val to_data_model :
        GapiGmailV1Model.HistoryLabelAdded.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryLabelAdded.t
    end
  module ListThreadsResponse :
    sig
      type t = {
        nextPageToken : string;
        resultSizeEstimate : int;
        threads : GapiGmailV1Model.Thread.t list;
      }
      val nextPageToken :
        (GapiGmailV1Model.ListThreadsResponse.t, string) GapiLens.t
      val resultSizeEstimate :
        (GapiGmailV1Model.ListThreadsResponse.t, int) GapiLens.t
      val threads :
        (GapiGmailV1Model.ListThreadsResponse.t,
         GapiGmailV1Model.Thread.t list)
        GapiLens.t
      val empty : GapiGmailV1Model.ListThreadsResponse.t
      val render :
        GapiGmailV1Model.ListThreadsResponse.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ListThreadsResponse.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ListThreadsResponse.t
      val to_data_model :
        GapiGmailV1Model.ListThreadsResponse.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ListThreadsResponse.t
    end
  module Draft :
    sig
      type t = { id : string; message : GapiGmailV1Model.Message.t; }
      val id : (GapiGmailV1Model.Draft.t, string) GapiLens.t
      val message :
        (GapiGmailV1Model.Draft.t, GapiGmailV1Model.Message.t) GapiLens.t
      val empty : GapiGmailV1Model.Draft.t
      val render : GapiGmailV1Model.Draft.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.Draft.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.Draft.t
      val to_data_model :
        GapiGmailV1Model.Draft.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.Draft.t
    end
  module ListDraftsResponse :
    sig
      type t = {
        drafts : GapiGmailV1Model.Draft.t list;
        nextPageToken : string;
        resultSizeEstimate : int;
      }
      val drafts :
        (GapiGmailV1Model.ListDraftsResponse.t,
         GapiGmailV1Model.Draft.t list)
        GapiLens.t
      val nextPageToken :
        (GapiGmailV1Model.ListDraftsResponse.t, string) GapiLens.t
      val resultSizeEstimate :
        (GapiGmailV1Model.ListDraftsResponse.t, int) GapiLens.t
      val empty : GapiGmailV1Model.ListDraftsResponse.t
      val render :
        GapiGmailV1Model.ListDraftsResponse.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ListDraftsResponse.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ListDraftsResponse.t
      val to_data_model :
        GapiGmailV1Model.ListDraftsResponse.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ListDraftsResponse.t
    end
  module HistoryMessageAdded :
    sig
      type t = { message : GapiGmailV1Model.Message.t; }
      val message :
        (GapiGmailV1Model.HistoryMessageAdded.t, GapiGmailV1Model.Message.t)
        GapiLens.t
      val empty : GapiGmailV1Model.HistoryMessageAdded.t
      val render :
        GapiGmailV1Model.HistoryMessageAdded.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.HistoryMessageAdded.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryMessageAdded.t
      val to_data_model :
        GapiGmailV1Model.HistoryMessageAdded.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryMessageAdded.t
    end
  module HistoryMessageDeleted :
    sig
      type t = { message : GapiGmailV1Model.Message.t; }
      val message :
        (GapiGmailV1Model.HistoryMessageDeleted.t,
         GapiGmailV1Model.Message.t)
        GapiLens.t
      val empty : GapiGmailV1Model.HistoryMessageDeleted.t
      val render :
        GapiGmailV1Model.HistoryMessageDeleted.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.HistoryMessageDeleted.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryMessageDeleted.t
      val to_data_model :
        GapiGmailV1Model.HistoryMessageDeleted.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.HistoryMessageDeleted.t
    end
  module History :
    sig
      type t = {
        id : string;
        labelsAdded : GapiGmailV1Model.HistoryLabelAdded.t list;
        labelsRemoved : GapiGmailV1Model.HistoryLabelRemoved.t list;
        messages : GapiGmailV1Model.Message.t list;
        messagesAdded : GapiGmailV1Model.HistoryMessageAdded.t list;
        messagesDeleted : GapiGmailV1Model.HistoryMessageDeleted.t list;
      }
      val id : (GapiGmailV1Model.History.t, string) GapiLens.t
      val labelsAdded :
        (GapiGmailV1Model.History.t,
         GapiGmailV1Model.HistoryLabelAdded.t list)
        GapiLens.t
      val labelsRemoved :
        (GapiGmailV1Model.History.t,
         GapiGmailV1Model.HistoryLabelRemoved.t list)
        GapiLens.t
      val messages :
        (GapiGmailV1Model.History.t, GapiGmailV1Model.Message.t list)
        GapiLens.t
      val messagesAdded :
        (GapiGmailV1Model.History.t,
         GapiGmailV1Model.HistoryMessageAdded.t list)
        GapiLens.t
      val messagesDeleted :
        (GapiGmailV1Model.History.t,
         GapiGmailV1Model.HistoryMessageDeleted.t list)
        GapiLens.t
      val empty : GapiGmailV1Model.History.t
      val render :
        GapiGmailV1Model.History.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.History.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.History.t
      val to_data_model :
        GapiGmailV1Model.History.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.History.t
    end
  module ListHistoryResponse :
    sig
      type t = {
        history : GapiGmailV1Model.History.t list;
        historyId : string;
        nextPageToken : string;
      }
      val history :
        (GapiGmailV1Model.ListHistoryResponse.t,
         GapiGmailV1Model.History.t list)
        GapiLens.t
      val historyId :
        (GapiGmailV1Model.ListHistoryResponse.t, string) GapiLens.t
      val nextPageToken :
        (GapiGmailV1Model.ListHistoryResponse.t, string) GapiLens.t
      val empty : GapiGmailV1Model.ListHistoryResponse.t
      val render :
        GapiGmailV1Model.ListHistoryResponse.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ListHistoryResponse.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ListHistoryResponse.t
      val to_data_model :
        GapiGmailV1Model.ListHistoryResponse.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ListHistoryResponse.t
    end
  module WatchRequest :
    sig
      type t = {
        labelFilterAction : string;
        labelIds : string list;
        topicName : string;
      }
      val labelFilterAction :
        (GapiGmailV1Model.WatchRequest.t, string) GapiLens.t
      val labelIds :
        (GapiGmailV1Model.WatchRequest.t, string list) GapiLens.t
      val topicName : (GapiGmailV1Model.WatchRequest.t, string) GapiLens.t
      val empty : GapiGmailV1Model.WatchRequest.t
      val render :
        GapiGmailV1Model.WatchRequest.t -> GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.WatchRequest.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.WatchRequest.t
      val to_data_model :
        GapiGmailV1Model.WatchRequest.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.WatchRequest.t
    end
  module ListMessagesResponse :
    sig
      type t = {
        messages : GapiGmailV1Model.Message.t list;
        nextPageToken : string;
        resultSizeEstimate : int;
      }
      val messages :
        (GapiGmailV1Model.ListMessagesResponse.t,
         GapiGmailV1Model.Message.t list)
        GapiLens.t
      val nextPageToken :
        (GapiGmailV1Model.ListMessagesResponse.t, string) GapiLens.t
      val resultSizeEstimate :
        (GapiGmailV1Model.ListMessagesResponse.t, int) GapiLens.t
      val empty : GapiGmailV1Model.ListMessagesResponse.t
      val render :
        GapiGmailV1Model.ListMessagesResponse.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ListMessagesResponse.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ListMessagesResponse.t
      val to_data_model :
        GapiGmailV1Model.ListMessagesResponse.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ListMessagesResponse.t
    end
  module ListLabelsResponse :
    sig
      type t = { labels : GapiGmailV1Model.Label.t list; }
      val labels :
        (GapiGmailV1Model.ListLabelsResponse.t,
         GapiGmailV1Model.Label.t list)
        GapiLens.t
      val empty : GapiGmailV1Model.ListLabelsResponse.t
      val render :
        GapiGmailV1Model.ListLabelsResponse.t ->
        GapiJson.json_data_model list
      val parse :
        GapiGmailV1Model.ListLabelsResponse.t ->
        GapiJson.json_data_model -> GapiGmailV1Model.ListLabelsResponse.t
      val to_data_model :
        GapiGmailV1Model.ListLabelsResponse.t -> GapiJson.json_data_model
      val of_data_model :
        GapiJson.json_data_model -> GapiGmailV1Model.ListLabelsResponse.t
    end
end