Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
fpc-src / usr / share / fpcsrc / 3.2.0 / packages / googleapi / src / googlegmail.pp
Size: Mime:
unit googlegmail;
{$MODE objfpc}
{$H+}

interface

uses sysutils, classes, googleservice, restbase, googlebase;

type
  
  //Top-level schema types
  TBatchDeleteMessagesRequest = Class;
  TDraft = Class;
  THistory = Class;
  THistoryLabelAdded = Class;
  THistoryLabelRemoved = Class;
  THistoryMessageAdded = Class;
  THistoryMessageDeleted = Class;
  TLabel = Class;
  TListDraftsResponse = Class;
  TListHistoryResponse = Class;
  TListLabelsResponse = Class;
  TListMessagesResponse = Class;
  TListThreadsResponse = Class;
  TMessage = Class;
  TMessagePart = Class;
  TMessagePartBody = Class;
  TMessagePartHeader = Class;
  TModifyMessageRequest = Class;
  TModifyThreadRequest = Class;
  TProfile = Class;
  TThread = Class;
  TWatchRequest = Class;
  TWatchResponse = Class;
  TBatchDeleteMessagesRequestArray = Array of TBatchDeleteMessagesRequest;
  TDraftArray = Array of TDraft;
  THistoryArray = Array of THistory;
  THistoryLabelAddedArray = Array of THistoryLabelAdded;
  THistoryLabelRemovedArray = Array of THistoryLabelRemoved;
  THistoryMessageAddedArray = Array of THistoryMessageAdded;
  THistoryMessageDeletedArray = Array of THistoryMessageDeleted;
  TLabelArray = Array of TLabel;
  TListDraftsResponseArray = Array of TListDraftsResponse;
  TListHistoryResponseArray = Array of TListHistoryResponse;
  TListLabelsResponseArray = Array of TListLabelsResponse;
  TListMessagesResponseArray = Array of TListMessagesResponse;
  TListThreadsResponseArray = Array of TListThreadsResponse;
  TMessageArray = Array of TMessage;
  TMessagePartArray = Array of TMessagePart;
  TMessagePartBodyArray = Array of TMessagePartBody;
  TMessagePartHeaderArray = Array of TMessagePartHeader;
  TModifyMessageRequestArray = Array of TModifyMessageRequest;
  TModifyThreadRequestArray = Array of TModifyThreadRequest;
  TProfileArray = Array of TProfile;
  TThreadArray = Array of TThread;
  TWatchRequestArray = Array of TWatchRequest;
  TWatchResponseArray = Array of TWatchResponse;
  //Anonymous types, using auto-generated names
  THistoryTypelabelsAddedArray = Array of THistoryLabelAdded;
  THistoryTypelabelsRemovedArray = Array of THistoryLabelRemoved;
  THistoryTypemessagesArray = Array of TMessage;
  THistoryTypemessagesAddedArray = Array of THistoryMessageAdded;
  THistoryTypemessagesDeletedArray = Array of THistoryMessageDeleted;
  TListDraftsResponseTypedraftsArray = Array of TDraft;
  TListHistoryResponseTypehistoryArray = Array of THistory;
  TListLabelsResponseTypelabelsArray = Array of TLabel;
  TListMessagesResponseTypemessagesArray = Array of TMessage;
  TListThreadsResponseTypethreadsArray = Array of TThread;
  TMessagePartTypeheadersArray = Array of TMessagePartHeader;
  TMessagePartTypepartsArray = Array of TMessagePart;
  TThreadTypemessagesArray = Array of TMessage;
  
  { --------------------------------------------------------------------
    TBatchDeleteMessagesRequest
    --------------------------------------------------------------------}
  
  TBatchDeleteMessagesRequest = Class(TGoogleBaseObject)
  Private
    Fids : TStringArray;
  Protected
    //Property setters
    Procedure Setids(AIndex : Integer; const AValue : TStringArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property ids : TStringArray Index 0 Read Fids Write Setids;
  end;
  TBatchDeleteMessagesRequestClass = Class of TBatchDeleteMessagesRequest;
  
  { --------------------------------------------------------------------
    TDraft
    --------------------------------------------------------------------}
  
  TDraft = Class(TGoogleBaseObject)
  Private
    Fid : String;
    Fmessage : TMessage;
  Protected
    //Property setters
    Procedure Setid(AIndex : Integer; const AValue : String); virtual;
    Procedure Setmessage(AIndex : Integer; const AValue : TMessage); virtual;
  Public
  Published
    Property id : String Index 0 Read Fid Write Setid;
    Property message : TMessage Index 8 Read Fmessage Write Setmessage;
  end;
  TDraftClass = Class of TDraft;
  
  { --------------------------------------------------------------------
    THistory
    --------------------------------------------------------------------}
  
  THistory = Class(TGoogleBaseObject)
  Private
    Fid : String;
    FlabelsAdded : THistoryTypelabelsAddedArray;
    FlabelsRemoved : THistoryTypelabelsRemovedArray;
    Fmessages : THistoryTypemessagesArray;
    FmessagesAdded : THistoryTypemessagesAddedArray;
    FmessagesDeleted : THistoryTypemessagesDeletedArray;
  Protected
    //Property setters
    Procedure Setid(AIndex : Integer; const AValue : String); virtual;
    Procedure SetlabelsAdded(AIndex : Integer; const AValue : THistoryTypelabelsAddedArray); virtual;
    Procedure SetlabelsRemoved(AIndex : Integer; const AValue : THistoryTypelabelsRemovedArray); virtual;
    Procedure Setmessages(AIndex : Integer; const AValue : THistoryTypemessagesArray); virtual;
    Procedure SetmessagesAdded(AIndex : Integer; const AValue : THistoryTypemessagesAddedArray); virtual;
    Procedure SetmessagesDeleted(AIndex : Integer; const AValue : THistoryTypemessagesDeletedArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property id : String Index 0 Read Fid Write Setid;
    Property labelsAdded : THistoryTypelabelsAddedArray Index 8 Read FlabelsAdded Write SetlabelsAdded;
    Property labelsRemoved : THistoryTypelabelsRemovedArray Index 16 Read FlabelsRemoved Write SetlabelsRemoved;
    Property messages : THistoryTypemessagesArray Index 24 Read Fmessages Write Setmessages;
    Property messagesAdded : THistoryTypemessagesAddedArray Index 32 Read FmessagesAdded Write SetmessagesAdded;
    Property messagesDeleted : THistoryTypemessagesDeletedArray Index 40 Read FmessagesDeleted Write SetmessagesDeleted;
  end;
  THistoryClass = Class of THistory;
  
  { --------------------------------------------------------------------
    THistoryLabelAdded
    --------------------------------------------------------------------}
  
  THistoryLabelAdded = Class(TGoogleBaseObject)
  Private
    FlabelIds : TStringArray;
    Fmessage : TMessage;
  Protected
    //Property setters
    Procedure SetlabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    Procedure Setmessage(AIndex : Integer; const AValue : TMessage); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property labelIds : TStringArray Index 0 Read FlabelIds Write SetlabelIds;
    Property message : TMessage Index 8 Read Fmessage Write Setmessage;
  end;
  THistoryLabelAddedClass = Class of THistoryLabelAdded;
  
  { --------------------------------------------------------------------
    THistoryLabelRemoved
    --------------------------------------------------------------------}
  
  THistoryLabelRemoved = Class(TGoogleBaseObject)
  Private
    FlabelIds : TStringArray;
    Fmessage : TMessage;
  Protected
    //Property setters
    Procedure SetlabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    Procedure Setmessage(AIndex : Integer; const AValue : TMessage); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property labelIds : TStringArray Index 0 Read FlabelIds Write SetlabelIds;
    Property message : TMessage Index 8 Read Fmessage Write Setmessage;
  end;
  THistoryLabelRemovedClass = Class of THistoryLabelRemoved;
  
  { --------------------------------------------------------------------
    THistoryMessageAdded
    --------------------------------------------------------------------}
  
  THistoryMessageAdded = Class(TGoogleBaseObject)
  Private
    Fmessage : TMessage;
  Protected
    //Property setters
    Procedure Setmessage(AIndex : Integer; const AValue : TMessage); virtual;
  Public
  Published
    Property message : TMessage Index 0 Read Fmessage Write Setmessage;
  end;
  THistoryMessageAddedClass = Class of THistoryMessageAdded;
  
  { --------------------------------------------------------------------
    THistoryMessageDeleted
    --------------------------------------------------------------------}
  
  THistoryMessageDeleted = Class(TGoogleBaseObject)
  Private
    Fmessage : TMessage;
  Protected
    //Property setters
    Procedure Setmessage(AIndex : Integer; const AValue : TMessage); virtual;
  Public
  Published
    Property message : TMessage Index 0 Read Fmessage Write Setmessage;
  end;
  THistoryMessageDeletedClass = Class of THistoryMessageDeleted;
  
  { --------------------------------------------------------------------
    TLabel
    --------------------------------------------------------------------}
  
  TLabel = Class(TGoogleBaseObject)
  Private
    Fid : String;
    FlabelListVisibility : String;
    FmessageListVisibility : String;
    FmessagesTotal : integer;
    FmessagesUnread : integer;
    Fname : String;
    FthreadsTotal : integer;
    FthreadsUnread : integer;
    F_type : String;
  Protected
    Class Function ExportPropertyName(Const AName : String) : string; override;
    //Property setters
    Procedure Setid(AIndex : Integer; const AValue : String); virtual;
    Procedure SetlabelListVisibility(AIndex : Integer; const AValue : String); virtual;
    Procedure SetmessageListVisibility(AIndex : Integer; const AValue : String); virtual;
    Procedure SetmessagesTotal(AIndex : Integer; const AValue : integer); virtual;
    Procedure SetmessagesUnread(AIndex : Integer; const AValue : integer); virtual;
    Procedure Setname(AIndex : Integer; const AValue : String); virtual;
    Procedure SetthreadsTotal(AIndex : Integer; const AValue : integer); virtual;
    Procedure SetthreadsUnread(AIndex : Integer; const AValue : integer); virtual;
    Procedure Set_type(AIndex : Integer; const AValue : String); virtual;
  Public
  Published
    Property id : String Index 0 Read Fid Write Setid;
    Property labelListVisibility : String Index 8 Read FlabelListVisibility Write SetlabelListVisibility;
    Property messageListVisibility : String Index 16 Read FmessageListVisibility Write SetmessageListVisibility;
    Property messagesTotal : integer Index 24 Read FmessagesTotal Write SetmessagesTotal;
    Property messagesUnread : integer Index 32 Read FmessagesUnread Write SetmessagesUnread;
    Property name : String Index 40 Read Fname Write Setname;
    Property threadsTotal : integer Index 48 Read FthreadsTotal Write SetthreadsTotal;
    Property threadsUnread : integer Index 56 Read FthreadsUnread Write SetthreadsUnread;
    Property _type : String Index 64 Read F_type Write Set_type;
  end;
  TLabelClass = Class of TLabel;
  
  { --------------------------------------------------------------------
    TListDraftsResponse
    --------------------------------------------------------------------}
  
  TListDraftsResponse = Class(TGoogleBaseObject)
  Private
    Fdrafts : TListDraftsResponseTypedraftsArray;
    FnextPageToken : String;
    FresultSizeEstimate : integer;
  Protected
    //Property setters
    Procedure Setdrafts(AIndex : Integer; const AValue : TListDraftsResponseTypedraftsArray); virtual;
    Procedure SetnextPageToken(AIndex : Integer; const AValue : String); virtual;
    Procedure SetresultSizeEstimate(AIndex : Integer; const AValue : integer); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property drafts : TListDraftsResponseTypedraftsArray Index 0 Read Fdrafts Write Setdrafts;
    Property nextPageToken : String Index 8 Read FnextPageToken Write SetnextPageToken;
    Property resultSizeEstimate : integer Index 16 Read FresultSizeEstimate Write SetresultSizeEstimate;
  end;
  TListDraftsResponseClass = Class of TListDraftsResponse;
  
  { --------------------------------------------------------------------
    TListHistoryResponse
    --------------------------------------------------------------------}
  
  TListHistoryResponse = Class(TGoogleBaseObject)
  Private
    Fhistory : TListHistoryResponseTypehistoryArray;
    FhistoryId : String;
    FnextPageToken : String;
  Protected
    //Property setters
    Procedure Sethistory(AIndex : Integer; const AValue : TListHistoryResponseTypehistoryArray); virtual;
    Procedure SethistoryId(AIndex : Integer; const AValue : String); virtual;
    Procedure SetnextPageToken(AIndex : Integer; const AValue : String); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property history : TListHistoryResponseTypehistoryArray Index 0 Read Fhistory Write Sethistory;
    Property historyId : String Index 8 Read FhistoryId Write SethistoryId;
    Property nextPageToken : String Index 16 Read FnextPageToken Write SetnextPageToken;
  end;
  TListHistoryResponseClass = Class of TListHistoryResponse;
  
  { --------------------------------------------------------------------
    TListLabelsResponse
    --------------------------------------------------------------------}
  
  TListLabelsResponse = Class(TGoogleBaseObject)
  Private
    Flabels : TListLabelsResponseTypelabelsArray;
  Protected
    //Property setters
    Procedure Setlabels(AIndex : Integer; const AValue : TListLabelsResponseTypelabelsArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property labels : TListLabelsResponseTypelabelsArray Index 0 Read Flabels Write Setlabels;
  end;
  TListLabelsResponseClass = Class of TListLabelsResponse;
  
  { --------------------------------------------------------------------
    TListMessagesResponse
    --------------------------------------------------------------------}
  
  TListMessagesResponse = Class(TGoogleBaseObject)
  Private
    Fmessages : TListMessagesResponseTypemessagesArray;
    FnextPageToken : String;
    FresultSizeEstimate : integer;
  Protected
    //Property setters
    Procedure Setmessages(AIndex : Integer; const AValue : TListMessagesResponseTypemessagesArray); virtual;
    Procedure SetnextPageToken(AIndex : Integer; const AValue : String); virtual;
    Procedure SetresultSizeEstimate(AIndex : Integer; const AValue : integer); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property messages : TListMessagesResponseTypemessagesArray Index 0 Read Fmessages Write Setmessages;
    Property nextPageToken : String Index 8 Read FnextPageToken Write SetnextPageToken;
    Property resultSizeEstimate : integer Index 16 Read FresultSizeEstimate Write SetresultSizeEstimate;
  end;
  TListMessagesResponseClass = Class of TListMessagesResponse;
  
  { --------------------------------------------------------------------
    TListThreadsResponse
    --------------------------------------------------------------------}
  
  TListThreadsResponse = Class(TGoogleBaseObject)
  Private
    FnextPageToken : String;
    FresultSizeEstimate : integer;
    Fthreads : TListThreadsResponseTypethreadsArray;
  Protected
    //Property setters
    Procedure SetnextPageToken(AIndex : Integer; const AValue : String); virtual;
    Procedure SetresultSizeEstimate(AIndex : Integer; const AValue : integer); virtual;
    Procedure Setthreads(AIndex : Integer; const AValue : TListThreadsResponseTypethreadsArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property nextPageToken : String Index 0 Read FnextPageToken Write SetnextPageToken;
    Property resultSizeEstimate : integer Index 8 Read FresultSizeEstimate Write SetresultSizeEstimate;
    Property threads : TListThreadsResponseTypethreadsArray Index 16 Read Fthreads Write Setthreads;
  end;
  TListThreadsResponseClass = Class of TListThreadsResponse;
  
  { --------------------------------------------------------------------
    TMessage
    --------------------------------------------------------------------}
  
  TMessage = Class(TGoogleBaseObject)
  Private
    FhistoryId : String;
    Fid : String;
    FinternalDate : String;
    FlabelIds : TStringArray;
    Fpayload : TMessagePart;
    Fraw : String;
    FsizeEstimate : integer;
    Fsnippet : String;
    FthreadId : String;
  Protected
    //Property setters
    Procedure SethistoryId(AIndex : Integer; const AValue : String); virtual;
    Procedure Setid(AIndex : Integer; const AValue : String); virtual;
    Procedure SetinternalDate(AIndex : Integer; const AValue : String); virtual;
    Procedure SetlabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    Procedure Setpayload(AIndex : Integer; const AValue : TMessagePart); virtual;
    Procedure Setraw(AIndex : Integer; const AValue : String); virtual;
    Procedure SetsizeEstimate(AIndex : Integer; const AValue : integer); virtual;
    Procedure Setsnippet(AIndex : Integer; const AValue : String); virtual;
    Procedure SetthreadId(AIndex : Integer; const AValue : String); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property historyId : String Index 0 Read FhistoryId Write SethistoryId;
    Property id : String Index 8 Read Fid Write Setid;
    Property internalDate : String Index 16 Read FinternalDate Write SetinternalDate;
    Property labelIds : TStringArray Index 24 Read FlabelIds Write SetlabelIds;
    Property payload : TMessagePart Index 32 Read Fpayload Write Setpayload;
    Property raw : String Index 40 Read Fraw Write Setraw;
    Property sizeEstimate : integer Index 48 Read FsizeEstimate Write SetsizeEstimate;
    Property snippet : String Index 56 Read Fsnippet Write Setsnippet;
    Property threadId : String Index 64 Read FthreadId Write SetthreadId;
  end;
  TMessageClass = Class of TMessage;
  
  { --------------------------------------------------------------------
    TMessagePart
    --------------------------------------------------------------------}
  
  TMessagePart = Class(TGoogleBaseObject)
  Private
    Fbody : TMessagePartBody;
    Ffilename : String;
    Fheaders : TMessagePartTypeheadersArray;
    FmimeType : String;
    FpartId : String;
    Fparts : TMessagePartTypepartsArray;
  Protected
    //Property setters
    Procedure Setbody(AIndex : Integer; const AValue : TMessagePartBody); virtual;
    Procedure Setfilename(AIndex : Integer; const AValue : String); virtual;
    Procedure Setheaders(AIndex : Integer; const AValue : TMessagePartTypeheadersArray); virtual;
    Procedure SetmimeType(AIndex : Integer; const AValue : String); virtual;
    Procedure SetpartId(AIndex : Integer; const AValue : String); virtual;
    Procedure Setparts(AIndex : Integer; const AValue : TMessagePartTypepartsArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property body : TMessagePartBody Index 0 Read Fbody Write Setbody;
    Property filename : String Index 8 Read Ffilename Write Setfilename;
    Property headers : TMessagePartTypeheadersArray Index 16 Read Fheaders Write Setheaders;
    Property mimeType : String Index 24 Read FmimeType Write SetmimeType;
    Property partId : String Index 32 Read FpartId Write SetpartId;
    Property parts : TMessagePartTypepartsArray Index 40 Read Fparts Write Setparts;
  end;
  TMessagePartClass = Class of TMessagePart;
  
  { --------------------------------------------------------------------
    TMessagePartBody
    --------------------------------------------------------------------}
  
  TMessagePartBody = Class(TGoogleBaseObject)
  Private
    FattachmentId : String;
    Fdata : String;
    Fsize : integer;
  Protected
    //Property setters
    Procedure SetattachmentId(AIndex : Integer; const AValue : String); virtual;
    Procedure Setdata(AIndex : Integer; const AValue : String); virtual;
    Procedure Setsize(AIndex : Integer; const AValue : integer); virtual;
  Public
  Published
    Property attachmentId : String Index 0 Read FattachmentId Write SetattachmentId;
    Property data : String Index 8 Read Fdata Write Setdata;
    Property size : integer Index 16 Read Fsize Write Setsize;
  end;
  TMessagePartBodyClass = Class of TMessagePartBody;
  
  { --------------------------------------------------------------------
    TMessagePartHeader
    --------------------------------------------------------------------}
  
  TMessagePartHeader = Class(TGoogleBaseObject)
  Private
    Fname : String;
    Fvalue : String;
  Protected
    //Property setters
    Procedure Setname(AIndex : Integer; const AValue : String); virtual;
    Procedure Setvalue(AIndex : Integer; const AValue : String); virtual;
  Public
  Published
    Property name : String Index 0 Read Fname Write Setname;
    Property value : String Index 8 Read Fvalue Write Setvalue;
  end;
  TMessagePartHeaderClass = Class of TMessagePartHeader;
  
  { --------------------------------------------------------------------
    TModifyMessageRequest
    --------------------------------------------------------------------}
  
  TModifyMessageRequest = Class(TGoogleBaseObject)
  Private
    FaddLabelIds : TStringArray;
    FremoveLabelIds : TStringArray;
  Protected
    //Property setters
    Procedure SetaddLabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    Procedure SetremoveLabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property addLabelIds : TStringArray Index 0 Read FaddLabelIds Write SetaddLabelIds;
    Property removeLabelIds : TStringArray Index 8 Read FremoveLabelIds Write SetremoveLabelIds;
  end;
  TModifyMessageRequestClass = Class of TModifyMessageRequest;
  
  { --------------------------------------------------------------------
    TModifyThreadRequest
    --------------------------------------------------------------------}
  
  TModifyThreadRequest = Class(TGoogleBaseObject)
  Private
    FaddLabelIds : TStringArray;
    FremoveLabelIds : TStringArray;
  Protected
    //Property setters
    Procedure SetaddLabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    Procedure SetremoveLabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property addLabelIds : TStringArray Index 0 Read FaddLabelIds Write SetaddLabelIds;
    Property removeLabelIds : TStringArray Index 8 Read FremoveLabelIds Write SetremoveLabelIds;
  end;
  TModifyThreadRequestClass = Class of TModifyThreadRequest;
  
  { --------------------------------------------------------------------
    TProfile
    --------------------------------------------------------------------}
  
  TProfile = Class(TGoogleBaseObject)
  Private
    FemailAddress : String;
    FhistoryId : String;
    FmessagesTotal : integer;
    FthreadsTotal : integer;
  Protected
    //Property setters
    Procedure SetemailAddress(AIndex : Integer; const AValue : String); virtual;
    Procedure SethistoryId(AIndex : Integer; const AValue : String); virtual;
    Procedure SetmessagesTotal(AIndex : Integer; const AValue : integer); virtual;
    Procedure SetthreadsTotal(AIndex : Integer; const AValue : integer); virtual;
  Public
  Published
    Property emailAddress : String Index 0 Read FemailAddress Write SetemailAddress;
    Property historyId : String Index 8 Read FhistoryId Write SethistoryId;
    Property messagesTotal : integer Index 16 Read FmessagesTotal Write SetmessagesTotal;
    Property threadsTotal : integer Index 24 Read FthreadsTotal Write SetthreadsTotal;
  end;
  TProfileClass = Class of TProfile;
  
  { --------------------------------------------------------------------
    TThread
    --------------------------------------------------------------------}
  
  TThread = Class(TGoogleBaseObject)
  Private
    FhistoryId : String;
    Fid : String;
    Fmessages : TThreadTypemessagesArray;
    Fsnippet : String;
  Protected
    //Property setters
    Procedure SethistoryId(AIndex : Integer; const AValue : String); virtual;
    Procedure Setid(AIndex : Integer; const AValue : String); virtual;
    Procedure Setmessages(AIndex : Integer; const AValue : TThreadTypemessagesArray); virtual;
    Procedure Setsnippet(AIndex : Integer; const AValue : String); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property historyId : String Index 0 Read FhistoryId Write SethistoryId;
    Property id : String Index 8 Read Fid Write Setid;
    Property messages : TThreadTypemessagesArray Index 16 Read Fmessages Write Setmessages;
    Property snippet : String Index 24 Read Fsnippet Write Setsnippet;
  end;
  TThreadClass = Class of TThread;
  
  { --------------------------------------------------------------------
    TWatchRequest
    --------------------------------------------------------------------}
  
  TWatchRequest = Class(TGoogleBaseObject)
  Private
    FlabelFilterAction : String;
    FlabelIds : TStringArray;
    FtopicName : String;
  Protected
    //Property setters
    Procedure SetlabelFilterAction(AIndex : Integer; const AValue : String); virtual;
    Procedure SetlabelIds(AIndex : Integer; const AValue : TStringArray); virtual;
    Procedure SettopicName(AIndex : Integer; const AValue : String); virtual;
    //2.6.4. bug workaround
    {$IFDEF VER2_6}
    Procedure SetArrayLength(Const AName : String; ALength : Longint); override;
    {$ENDIF VER2_6}
  Public
  Published
    Property labelFilterAction : String Index 0 Read FlabelFilterAction Write SetlabelFilterAction;
    Property labelIds : TStringArray Index 8 Read FlabelIds Write SetlabelIds;
    Property topicName : String Index 16 Read FtopicName Write SettopicName;
  end;
  TWatchRequestClass = Class of TWatchRequest;
  
  { --------------------------------------------------------------------
    TWatchResponse
    --------------------------------------------------------------------}
  
  TWatchResponse = Class(TGoogleBaseObject)
  Private
    Fexpiration : String;
    FhistoryId : String;
  Protected
    //Property setters
    Procedure Setexpiration(AIndex : Integer; const AValue : String); virtual;
    Procedure SethistoryId(AIndex : Integer; const AValue : String); virtual;
  Public
  Published
    Property expiration : String Index 0 Read Fexpiration Write Setexpiration;
    Property historyId : String Index 8 Read FhistoryId Write SethistoryId;
  end;
  TWatchResponseClass = Class of TWatchResponse;
  
  { --------------------------------------------------------------------
    TUsersDraftsResource
    --------------------------------------------------------------------}
  
  
  //Optional query Options for TUsersDraftsResource, method Get
  
  TUsersDraftsGetOptions = Record
    format : String;
  end;
  
  
  //Optional query Options for TUsersDraftsResource, method List
  
  TUsersDraftsListOptions = Record
    includeSpamTrash : boolean;
    maxResults : integer;
    pageToken : String;
  end;
  
  TUsersDraftsResource = Class(TGoogleResource)
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Function Create(userId: string; aDraft : TDraft) : TDraft;overload;
    Procedure Delete(id: string; userId: string);
    Function Get(id: string; userId: string; AQuery : string  = '') : TDraft;
    Function Get(id: string; userId: string; AQuery : TUsersDraftsgetOptions) : TDraft;
    Function List(userId: string; AQuery : string  = '') : TListDraftsResponse;
    Function List(userId: string; AQuery : TUsersDraftslistOptions) : TListDraftsResponse;
    Function Send(userId: string; aDraft : TDraft) : TMessage;
    Function Update(id: string; userId: string; aDraft : TDraft) : TDraft;
  end;
  
  
  { --------------------------------------------------------------------
    TUsersHistoryResource
    --------------------------------------------------------------------}
  
  
  //Optional query Options for TUsersHistoryResource, method List
  
  TUsersHistoryListOptions = Record
    labelId : String;
    maxResults : integer;
    pageToken : String;
    startHistoryId : String;
  end;
  
  TUsersHistoryResource = Class(TGoogleResource)
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Function List(userId: string; AQuery : string  = '') : TListHistoryResponse;
    Function List(userId: string; AQuery : TUsersHistorylistOptions) : TListHistoryResponse;
  end;
  
  
  { --------------------------------------------------------------------
    TUsersLabelsResource
    --------------------------------------------------------------------}
  
  TUsersLabelsResource = Class(TGoogleResource)
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Function Create(userId: string; aLabel : TLabel) : TLabel;overload;
    Procedure Delete(id: string; userId: string);
    Function Get(id: string; userId: string) : TLabel;
    Function List(userId: string) : TListLabelsResponse;
    Function Patch(id: string; userId: string; aLabel : TLabel) : TLabel;
    Function Update(id: string; userId: string; aLabel : TLabel) : TLabel;
  end;
  
  
  { --------------------------------------------------------------------
    TUsersMessagesAttachmentsResource
    --------------------------------------------------------------------}
  
  TUsersMessagesAttachmentsResource = Class(TGoogleResource)
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Function Get(id: string; messageId: string; userId: string) : TMessagePartBody;
  end;
  
  
  { --------------------------------------------------------------------
    TUsersMessagesResource
    --------------------------------------------------------------------}
  
  
  //Optional query Options for TUsersMessagesResource, method Get
  
  TUsersMessagesGetOptions = Record
    format : String;
    metadataHeaders : String;
  end;
  
  
  //Optional query Options for TUsersMessagesResource, method Import
  
  TUsersMessagesImportOptions = Record
    deleted : boolean;
    internalDateSource : String;
    neverMarkSpam : boolean;
    processForCalendar : boolean;
  end;
  
  
  //Optional query Options for TUsersMessagesResource, method Insert
  
  TUsersMessagesInsertOptions = Record
    deleted : boolean;
    internalDateSource : String;
  end;
  
  
  //Optional query Options for TUsersMessagesResource, method List
  
  TUsersMessagesListOptions = Record
    includeSpamTrash : boolean;
    labelIds : String;
    maxResults : integer;
    pageToken : String;
    q : String;
  end;
  
  TUsersMessagesResource = Class(TGoogleResource)
  Private
    FAttachmentsInstance : TUsersMessagesAttachmentsResource;
    Function GetAttachmentsInstance : TUsersMessagesAttachmentsResource;virtual;
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Procedure BatchDelete(userId: string; aBatchDeleteMessagesRequest : TBatchDeleteMessagesRequest);
    Procedure Delete(id: string; userId: string);
    Function Get(id: string; userId: string; AQuery : string  = '') : TMessage;
    Function Get(id: string; userId: string; AQuery : TUsersMessagesgetOptions) : TMessage;
    Function Import(userId: string; aMessage : TMessage; AQuery : string  = '') : TMessage;
    Function Import(userId: string; aMessage : TMessage; AQuery : TUsersMessagesimportOptions) : TMessage;
    Function Insert(userId: string; aMessage : TMessage; AQuery : string  = '') : TMessage;
    Function Insert(userId: string; aMessage : TMessage; AQuery : TUsersMessagesinsertOptions) : TMessage;
    Function List(userId: string; AQuery : string  = '') : TListMessagesResponse;
    Function List(userId: string; AQuery : TUsersMessageslistOptions) : TListMessagesResponse;
    Function Modify(id: string; userId: string; aModifyMessageRequest : TModifyMessageRequest) : TMessage;
    Function Send(userId: string; aMessage : TMessage) : TMessage;
    Function Trash(id: string; userId: string) : TMessage;
    Function Untrash(id: string; userId: string) : TMessage;
    Function CreateAttachmentsResource(AOwner : TComponent) : TUsersMessagesAttachmentsResource;virtual;overload;
    Function CreateAttachmentsResource : TUsersMessagesAttachmentsResource;virtual;overload;
    Property AttachmentsResource : TUsersMessagesAttachmentsResource Read GetAttachmentsInstance;
  end;
  
  
  { --------------------------------------------------------------------
    TUsersThreadsResource
    --------------------------------------------------------------------}
  
  
  //Optional query Options for TUsersThreadsResource, method Get
  
  TUsersThreadsGetOptions = Record
    format : String;
    metadataHeaders : String;
  end;
  
  
  //Optional query Options for TUsersThreadsResource, method List
  
  TUsersThreadsListOptions = Record
    includeSpamTrash : boolean;
    labelIds : String;
    maxResults : integer;
    pageToken : String;
    q : String;
  end;
  
  TUsersThreadsResource = Class(TGoogleResource)
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Procedure Delete(id: string; userId: string);
    Function Get(id: string; userId: string; AQuery : string  = '') : TThread;
    Function Get(id: string; userId: string; AQuery : TUsersThreadsgetOptions) : TThread;
    Function List(userId: string; AQuery : string  = '') : TListThreadsResponse;
    Function List(userId: string; AQuery : TUsersThreadslistOptions) : TListThreadsResponse;
    Function Modify(id: string; userId: string; aModifyThreadRequest : TModifyThreadRequest) : TThread;
    Function Trash(id: string; userId: string) : TThread;
    Function Untrash(id: string; userId: string) : TThread;
  end;
  
  
  { --------------------------------------------------------------------
    TUsersResource
    --------------------------------------------------------------------}
  
  TUsersResource = Class(TGoogleResource)
  Private
    FDraftsInstance : TUsersDraftsResource;
    FHistoryInstance : TUsersHistoryResource;
    FLabelsInstance : TUsersLabelsResource;
    FMessagesAttachmentsInstance : TUsersMessagesAttachmentsResource;
    FMessagesInstance : TUsersMessagesResource;
    FThreadsInstance : TUsersThreadsResource;
    Function GetDraftsInstance : TUsersDraftsResource;virtual;
    Function GetHistoryInstance : TUsersHistoryResource;virtual;
    Function GetLabelsInstance : TUsersLabelsResource;virtual;
    Function GetMessagesAttachmentsInstance : TUsersMessagesAttachmentsResource;virtual;
    Function GetMessagesInstance : TUsersMessagesResource;virtual;
    Function GetThreadsInstance : TUsersThreadsResource;virtual;
  Public
    Class Function ResourceName : String; override;
    Class Function DefaultAPI : TGoogleAPIClass; override;
    Function GetProfile(userId: string) : TProfile;
    Procedure Stop(userId: string);
    Function Watch(userId: string; aWatchRequest : TWatchRequest) : TWatchResponse;
    Function CreateDraftsResource(AOwner : TComponent) : TUsersDraftsResource;virtual;overload;
    Function CreateDraftsResource : TUsersDraftsResource;virtual;overload;
    Function CreateHistoryResource(AOwner : TComponent) : TUsersHistoryResource;virtual;overload;
    Function CreateHistoryResource : TUsersHistoryResource;virtual;overload;
    Function CreateLabelsResource(AOwner : TComponent) : TUsersLabelsResource;virtual;overload;
    Function CreateLabelsResource : TUsersLabelsResource;virtual;overload;
    Function CreateMessagesAttachmentsResource(AOwner : TComponent) : TUsersMessagesAttachmentsResource;virtual;overload;
    Function CreateMessagesAttachmentsResource : TUsersMessagesAttachmentsResource;virtual;overload;
    Function CreateMessagesResource(AOwner : TComponent) : TUsersMessagesResource;virtual;overload;
    Function CreateMessagesResource : TUsersMessagesResource;virtual;overload;
    Function CreateThreadsResource(AOwner : TComponent) : TUsersThreadsResource;virtual;overload;
    Function CreateThreadsResource : TUsersThreadsResource;virtual;overload;
    Property DraftsResource : TUsersDraftsResource Read GetDraftsInstance;
    Property HistoryResource : TUsersHistoryResource Read GetHistoryInstance;
    Property LabelsResource : TUsersLabelsResource Read GetLabelsInstance;
    Property MessagesAttachmentsResource : TUsersMessagesAttachmentsResource Read GetMessagesAttachmentsInstance;
    Property MessagesResource : TUsersMessagesResource Read GetMessagesInstance;
    Property ThreadsResource : TUsersThreadsResource Read GetThreadsInstance;
  end;
  
  
  { --------------------------------------------------------------------
    TGmailAPI
    --------------------------------------------------------------------}
  
  TGmailAPI = Class(TGoogleAPI)
  Private
    FUsersDraftsInstance : TUsersDraftsResource;
    FUsersHistoryInstance : TUsersHistoryResource;
    FUsersLabelsInstance : TUsersLabelsResource;
    FUsersMessagesAttachmentsInstance : TUsersMessagesAttachmentsResource;
    FUsersMessagesInstance : TUsersMessagesResource;
    FUsersThreadsInstance : TUsersThreadsResource;
    FUsersInstance : TUsersResource;
    Function GetUsersDraftsInstance : TUsersDraftsResource;virtual;
    Function GetUsersHistoryInstance : TUsersHistoryResource;virtual;
    Function GetUsersLabelsInstance : TUsersLabelsResource;virtual;
    Function GetUsersMessagesAttachmentsInstance : TUsersMessagesAttachmentsResource;virtual;
    Function GetUsersMessagesInstance : TUsersMessagesResource;virtual;
    Function GetUsersThreadsInstance : TUsersThreadsResource;virtual;
    Function GetUsersInstance : TUsersResource;virtual;
  Public
    //Override class functions with API info
    Class Function APIName : String; override;
    Class Function APIVersion : String; override;
    Class Function APIRevision : String; override;
    Class Function APIID : String; override;
    Class Function APITitle : String; override;
    Class Function APIDescription : String; override;
    Class Function APIOwnerDomain : String; override;
    Class Function APIOwnerName : String; override;
    Class Function APIIcon16 : String; override;
    Class Function APIIcon32 : String; override;
    Class Function APIdocumentationLink : String; override;
    Class Function APIrootUrl : string; override;
    Class Function APIbasePath : string;override;
    Class Function APIbaseURL : String;override;
    Class Function APIProtocol : string;override;
    Class Function APIservicePath : string;override;
    Class Function APIbatchPath : String;override;
    Class Function APIAuthScopes : TScopeInfoArray;override;
    Class Function APINeedsAuth : Boolean;override;
    Class Procedure RegisterAPIResources; override;
    //Add create function for resources
    Function CreateUsersDraftsResource(AOwner : TComponent) : TUsersDraftsResource;virtual;overload;
    Function CreateUsersDraftsResource : TUsersDraftsResource;virtual;overload;
    Function CreateUsersHistoryResource(AOwner : TComponent) : TUsersHistoryResource;virtual;overload;
    Function CreateUsersHistoryResource : TUsersHistoryResource;virtual;overload;
    Function CreateUsersLabelsResource(AOwner : TComponent) : TUsersLabelsResource;virtual;overload;
    Function CreateUsersLabelsResource : TUsersLabelsResource;virtual;overload;
    Function CreateUsersMessagesAttachmentsResource(AOwner : TComponent) : TUsersMessagesAttachmentsResource;virtual;overload;
    Function CreateUsersMessagesAttachmentsResource : TUsersMessagesAttachmentsResource;virtual;overload;
    Function CreateUsersMessagesResource(AOwner : TComponent) : TUsersMessagesResource;virtual;overload;
    Function CreateUsersMessagesResource : TUsersMessagesResource;virtual;overload;
    Function CreateUsersThreadsResource(AOwner : TComponent) : TUsersThreadsResource;virtual;overload;
    Function CreateUsersThreadsResource : TUsersThreadsResource;virtual;overload;
    Function CreateUsersResource(AOwner : TComponent) : TUsersResource;virtual;overload;
    Function CreateUsersResource : TUsersResource;virtual;overload;
    //Add default on-demand instances for resources
    Property UsersDraftsResource : TUsersDraftsResource Read GetUsersDraftsInstance;
    Property UsersHistoryResource : TUsersHistoryResource Read GetUsersHistoryInstance;
    Property UsersLabelsResource : TUsersLabelsResource Read GetUsersLabelsInstance;
    Property UsersMessagesAttachmentsResource : TUsersMessagesAttachmentsResource Read GetUsersMessagesAttachmentsInstance;
    Property UsersMessagesResource : TUsersMessagesResource Read GetUsersMessagesInstance;
    Property UsersThreadsResource : TUsersThreadsResource Read GetUsersThreadsInstance;
    Property UsersResource : TUsersResource Read GetUsersInstance;
  end;

implementation


{ --------------------------------------------------------------------
  TBatchDeleteMessagesRequest
  --------------------------------------------------------------------}


Procedure TBatchDeleteMessagesRequest.Setids(AIndex : Integer; const AValue : TStringArray); 

begin
  If (Fids=AValue) then exit;
  Fids:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TBatchDeleteMessagesRequest.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'ids' : SetLength(Fids,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TDraft
  --------------------------------------------------------------------}


Procedure TDraft.Setid(AIndex : Integer; const AValue : String); 

begin
  If (Fid=AValue) then exit;
  Fid:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TDraft.Setmessage(AIndex : Integer; const AValue : TMessage); 

begin
  If (Fmessage=AValue) then exit;
  Fmessage:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  THistory
  --------------------------------------------------------------------}


Procedure THistory.Setid(AIndex : Integer; const AValue : String); 

begin
  If (Fid=AValue) then exit;
  Fid:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistory.SetlabelsAdded(AIndex : Integer; const AValue : THistoryTypelabelsAddedArray); 

begin
  If (FlabelsAdded=AValue) then exit;
  FlabelsAdded:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistory.SetlabelsRemoved(AIndex : Integer; const AValue : THistoryTypelabelsRemovedArray); 

begin
  If (FlabelsRemoved=AValue) then exit;
  FlabelsRemoved:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistory.Setmessages(AIndex : Integer; const AValue : THistoryTypemessagesArray); 

begin
  If (Fmessages=AValue) then exit;
  Fmessages:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistory.SetmessagesAdded(AIndex : Integer; const AValue : THistoryTypemessagesAddedArray); 

begin
  If (FmessagesAdded=AValue) then exit;
  FmessagesAdded:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistory.SetmessagesDeleted(AIndex : Integer; const AValue : THistoryTypemessagesDeletedArray); 

begin
  If (FmessagesDeleted=AValue) then exit;
  FmessagesDeleted:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure THistory.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'labelsadded' : SetLength(FlabelsAdded,ALength);
  'labelsremoved' : SetLength(FlabelsRemoved,ALength);
  'messages' : SetLength(Fmessages,ALength);
  'messagesadded' : SetLength(FmessagesAdded,ALength);
  'messagesdeleted' : SetLength(FmessagesDeleted,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  THistoryLabelAdded
  --------------------------------------------------------------------}


Procedure THistoryLabelAdded.SetlabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FlabelIds=AValue) then exit;
  FlabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistoryLabelAdded.Setmessage(AIndex : Integer; const AValue : TMessage); 

begin
  If (Fmessage=AValue) then exit;
  Fmessage:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure THistoryLabelAdded.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'labelids' : SetLength(FlabelIds,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  THistoryLabelRemoved
  --------------------------------------------------------------------}


Procedure THistoryLabelRemoved.SetlabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FlabelIds=AValue) then exit;
  FlabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure THistoryLabelRemoved.Setmessage(AIndex : Integer; const AValue : TMessage); 

begin
  If (Fmessage=AValue) then exit;
  Fmessage:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure THistoryLabelRemoved.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'labelids' : SetLength(FlabelIds,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  THistoryMessageAdded
  --------------------------------------------------------------------}


Procedure THistoryMessageAdded.Setmessage(AIndex : Integer; const AValue : TMessage); 

begin
  If (Fmessage=AValue) then exit;
  Fmessage:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  THistoryMessageDeleted
  --------------------------------------------------------------------}


Procedure THistoryMessageDeleted.Setmessage(AIndex : Integer; const AValue : TMessage); 

begin
  If (Fmessage=AValue) then exit;
  Fmessage:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  TLabel
  --------------------------------------------------------------------}


Procedure TLabel.Setid(AIndex : Integer; const AValue : String); 

begin
  If (Fid=AValue) then exit;
  Fid:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.SetlabelListVisibility(AIndex : Integer; const AValue : String); 

begin
  If (FlabelListVisibility=AValue) then exit;
  FlabelListVisibility:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.SetmessageListVisibility(AIndex : Integer; const AValue : String); 

begin
  If (FmessageListVisibility=AValue) then exit;
  FmessageListVisibility:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.SetmessagesTotal(AIndex : Integer; const AValue : integer); 

begin
  If (FmessagesTotal=AValue) then exit;
  FmessagesTotal:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.SetmessagesUnread(AIndex : Integer; const AValue : integer); 

begin
  If (FmessagesUnread=AValue) then exit;
  FmessagesUnread:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.Setname(AIndex : Integer; const AValue : String); 

begin
  If (Fname=AValue) then exit;
  Fname:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.SetthreadsTotal(AIndex : Integer; const AValue : integer); 

begin
  If (FthreadsTotal=AValue) then exit;
  FthreadsTotal:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.SetthreadsUnread(AIndex : Integer; const AValue : integer); 

begin
  If (FthreadsUnread=AValue) then exit;
  FthreadsUnread:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TLabel.Set_type(AIndex : Integer; const AValue : String); 

begin
  If (F_type=AValue) then exit;
  F_type:=AValue;
  MarkPropertyChanged(AIndex);
end;



Class Function TLabel.ExportPropertyName(Const AName : String) :String;

begin
  Case AName of
  '_type' : Result:='type';
  else
    Result:=Inherited ExportPropertyName(AName);
  end;
end;




{ --------------------------------------------------------------------
  TListDraftsResponse
  --------------------------------------------------------------------}


Procedure TListDraftsResponse.Setdrafts(AIndex : Integer; const AValue : TListDraftsResponseTypedraftsArray); 

begin
  If (Fdrafts=AValue) then exit;
  Fdrafts:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListDraftsResponse.SetnextPageToken(AIndex : Integer; const AValue : String); 

begin
  If (FnextPageToken=AValue) then exit;
  FnextPageToken:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListDraftsResponse.SetresultSizeEstimate(AIndex : Integer; const AValue : integer); 

begin
  If (FresultSizeEstimate=AValue) then exit;
  FresultSizeEstimate:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TListDraftsResponse.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'drafts' : SetLength(Fdrafts,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TListHistoryResponse
  --------------------------------------------------------------------}


Procedure TListHistoryResponse.Sethistory(AIndex : Integer; const AValue : TListHistoryResponseTypehistoryArray); 

begin
  If (Fhistory=AValue) then exit;
  Fhistory:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListHistoryResponse.SethistoryId(AIndex : Integer; const AValue : String); 

begin
  If (FhistoryId=AValue) then exit;
  FhistoryId:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListHistoryResponse.SetnextPageToken(AIndex : Integer; const AValue : String); 

begin
  If (FnextPageToken=AValue) then exit;
  FnextPageToken:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TListHistoryResponse.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'history' : SetLength(Fhistory,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TListLabelsResponse
  --------------------------------------------------------------------}


Procedure TListLabelsResponse.Setlabels(AIndex : Integer; const AValue : TListLabelsResponseTypelabelsArray); 

begin
  If (Flabels=AValue) then exit;
  Flabels:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TListLabelsResponse.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'labels' : SetLength(Flabels,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TListMessagesResponse
  --------------------------------------------------------------------}


Procedure TListMessagesResponse.Setmessages(AIndex : Integer; const AValue : TListMessagesResponseTypemessagesArray); 

begin
  If (Fmessages=AValue) then exit;
  Fmessages:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListMessagesResponse.SetnextPageToken(AIndex : Integer; const AValue : String); 

begin
  If (FnextPageToken=AValue) then exit;
  FnextPageToken:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListMessagesResponse.SetresultSizeEstimate(AIndex : Integer; const AValue : integer); 

begin
  If (FresultSizeEstimate=AValue) then exit;
  FresultSizeEstimate:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TListMessagesResponse.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'messages' : SetLength(Fmessages,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TListThreadsResponse
  --------------------------------------------------------------------}


Procedure TListThreadsResponse.SetnextPageToken(AIndex : Integer; const AValue : String); 

begin
  If (FnextPageToken=AValue) then exit;
  FnextPageToken:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListThreadsResponse.SetresultSizeEstimate(AIndex : Integer; const AValue : integer); 

begin
  If (FresultSizeEstimate=AValue) then exit;
  FresultSizeEstimate:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TListThreadsResponse.Setthreads(AIndex : Integer; const AValue : TListThreadsResponseTypethreadsArray); 

begin
  If (Fthreads=AValue) then exit;
  Fthreads:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TListThreadsResponse.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'threads' : SetLength(Fthreads,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TMessage
  --------------------------------------------------------------------}


Procedure TMessage.SethistoryId(AIndex : Integer; const AValue : String); 

begin
  If (FhistoryId=AValue) then exit;
  FhistoryId:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.Setid(AIndex : Integer; const AValue : String); 

begin
  If (Fid=AValue) then exit;
  Fid:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.SetinternalDate(AIndex : Integer; const AValue : String); 

begin
  If (FinternalDate=AValue) then exit;
  FinternalDate:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.SetlabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FlabelIds=AValue) then exit;
  FlabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.Setpayload(AIndex : Integer; const AValue : TMessagePart); 

begin
  If (Fpayload=AValue) then exit;
  Fpayload:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.Setraw(AIndex : Integer; const AValue : String); 

begin
  If (Fraw=AValue) then exit;
  Fraw:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.SetsizeEstimate(AIndex : Integer; const AValue : integer); 

begin
  If (FsizeEstimate=AValue) then exit;
  FsizeEstimate:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.Setsnippet(AIndex : Integer; const AValue : String); 

begin
  If (Fsnippet=AValue) then exit;
  Fsnippet:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessage.SetthreadId(AIndex : Integer; const AValue : String); 

begin
  If (FthreadId=AValue) then exit;
  FthreadId:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TMessage.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'labelids' : SetLength(FlabelIds,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TMessagePart
  --------------------------------------------------------------------}


Procedure TMessagePart.Setbody(AIndex : Integer; const AValue : TMessagePartBody); 

begin
  If (Fbody=AValue) then exit;
  Fbody:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePart.Setfilename(AIndex : Integer; const AValue : String); 

begin
  If (Ffilename=AValue) then exit;
  Ffilename:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePart.Setheaders(AIndex : Integer; const AValue : TMessagePartTypeheadersArray); 

begin
  If (Fheaders=AValue) then exit;
  Fheaders:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePart.SetmimeType(AIndex : Integer; const AValue : String); 

begin
  If (FmimeType=AValue) then exit;
  FmimeType:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePart.SetpartId(AIndex : Integer; const AValue : String); 

begin
  If (FpartId=AValue) then exit;
  FpartId:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePart.Setparts(AIndex : Integer; const AValue : TMessagePartTypepartsArray); 

begin
  If (Fparts=AValue) then exit;
  Fparts:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TMessagePart.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'headers' : SetLength(Fheaders,ALength);
  'parts' : SetLength(Fparts,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TMessagePartBody
  --------------------------------------------------------------------}


Procedure TMessagePartBody.SetattachmentId(AIndex : Integer; const AValue : String); 

begin
  If (FattachmentId=AValue) then exit;
  FattachmentId:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePartBody.Setdata(AIndex : Integer; const AValue : String); 

begin
  If (Fdata=AValue) then exit;
  Fdata:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePartBody.Setsize(AIndex : Integer; const AValue : integer); 

begin
  If (Fsize=AValue) then exit;
  Fsize:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  TMessagePartHeader
  --------------------------------------------------------------------}


Procedure TMessagePartHeader.Setname(AIndex : Integer; const AValue : String); 

begin
  If (Fname=AValue) then exit;
  Fname:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TMessagePartHeader.Setvalue(AIndex : Integer; const AValue : String); 

begin
  If (Fvalue=AValue) then exit;
  Fvalue:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  TModifyMessageRequest
  --------------------------------------------------------------------}


Procedure TModifyMessageRequest.SetaddLabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FaddLabelIds=AValue) then exit;
  FaddLabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TModifyMessageRequest.SetremoveLabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FremoveLabelIds=AValue) then exit;
  FremoveLabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TModifyMessageRequest.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'addlabelids' : SetLength(FaddLabelIds,ALength);
  'removelabelids' : SetLength(FremoveLabelIds,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TModifyThreadRequest
  --------------------------------------------------------------------}


Procedure TModifyThreadRequest.SetaddLabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FaddLabelIds=AValue) then exit;
  FaddLabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TModifyThreadRequest.SetremoveLabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FremoveLabelIds=AValue) then exit;
  FremoveLabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TModifyThreadRequest.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'addlabelids' : SetLength(FaddLabelIds,ALength);
  'removelabelids' : SetLength(FremoveLabelIds,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TProfile
  --------------------------------------------------------------------}


Procedure TProfile.SetemailAddress(AIndex : Integer; const AValue : String); 

begin
  If (FemailAddress=AValue) then exit;
  FemailAddress:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TProfile.SethistoryId(AIndex : Integer; const AValue : String); 

begin
  If (FhistoryId=AValue) then exit;
  FhistoryId:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TProfile.SetmessagesTotal(AIndex : Integer; const AValue : integer); 

begin
  If (FmessagesTotal=AValue) then exit;
  FmessagesTotal:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TProfile.SetthreadsTotal(AIndex : Integer; const AValue : integer); 

begin
  If (FthreadsTotal=AValue) then exit;
  FthreadsTotal:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  TThread
  --------------------------------------------------------------------}


Procedure TThread.SethistoryId(AIndex : Integer; const AValue : String); 

begin
  If (FhistoryId=AValue) then exit;
  FhistoryId:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TThread.Setid(AIndex : Integer; const AValue : String); 

begin
  If (Fid=AValue) then exit;
  Fid:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TThread.Setmessages(AIndex : Integer; const AValue : TThreadTypemessagesArray); 

begin
  If (Fmessages=AValue) then exit;
  Fmessages:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TThread.Setsnippet(AIndex : Integer; const AValue : String); 

begin
  If (Fsnippet=AValue) then exit;
  Fsnippet:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TThread.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'messages' : SetLength(Fmessages,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TWatchRequest
  --------------------------------------------------------------------}


Procedure TWatchRequest.SetlabelFilterAction(AIndex : Integer; const AValue : String); 

begin
  If (FlabelFilterAction=AValue) then exit;
  FlabelFilterAction:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TWatchRequest.SetlabelIds(AIndex : Integer; const AValue : TStringArray); 

begin
  If (FlabelIds=AValue) then exit;
  FlabelIds:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TWatchRequest.SettopicName(AIndex : Integer; const AValue : String); 

begin
  If (FtopicName=AValue) then exit;
  FtopicName:=AValue;
  MarkPropertyChanged(AIndex);
end;


//2.6.4. bug workaround
{$IFDEF VER2_6}
Procedure TWatchRequest.SetArrayLength(Const AName : String; ALength : Longint); 

begin
  Case AName of
  'labelids' : SetLength(FlabelIds,ALength);
  else
    Inherited SetArrayLength(AName,ALength);
  end;
end;
{$ENDIF VER2_6}




{ --------------------------------------------------------------------
  TWatchResponse
  --------------------------------------------------------------------}


Procedure TWatchResponse.Setexpiration(AIndex : Integer; const AValue : String); 

begin
  If (Fexpiration=AValue) then exit;
  Fexpiration:=AValue;
  MarkPropertyChanged(AIndex);
end;



Procedure TWatchResponse.SethistoryId(AIndex : Integer; const AValue : String); 

begin
  If (FhistoryId=AValue) then exit;
  FhistoryId:=AValue;
  MarkPropertyChanged(AIndex);
end;





{ --------------------------------------------------------------------
  TUsersDraftsResource
  --------------------------------------------------------------------}


Class Function TUsersDraftsResource.ResourceName : String;

begin
  Result:='drafts';
end;

Class Function TUsersDraftsResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Function TUsersDraftsResource.Create(userId: string; aDraft : TDraft) : TDraft;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/drafts';
  _Methodid   = 'gmail.users.drafts.create';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aDraft,TDraft) as TDraft;
end;

Procedure TUsersDraftsResource.Delete(id: string; userId: string);

Const
  _HTTPMethod = 'DELETE';
  _Path       = '{userId}/drafts/{id}';
  _Methodid   = 'gmail.users.drafts.delete';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  ServiceCall(_HTTPMethod,_P,'',Nil,Nil);
end;

Function TUsersDraftsResource.Get(id: string; userId: string; AQuery : string = '') : TDraft;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/drafts/{id}';
  _Methodid   = 'gmail.users.drafts.get';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TDraft) as TDraft;
end;


Function TUsersDraftsResource.Get(id: string; userId: string; AQuery : TUsersDraftsgetOptions) : TDraft;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'format',AQuery.format);
  Result:=Get(id,userId,_Q);
end;

Function TUsersDraftsResource.List(userId: string; AQuery : string = '') : TListDraftsResponse;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/drafts';
  _Methodid   = 'gmail.users.drafts.list';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TListDraftsResponse) as TListDraftsResponse;
end;


Function TUsersDraftsResource.List(userId: string; AQuery : TUsersDraftslistOptions) : TListDraftsResponse;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'includeSpamTrash',AQuery.includeSpamTrash);
  AddToQuery(_Q,'maxResults',AQuery.maxResults);
  AddToQuery(_Q,'pageToken',AQuery.pageToken);
  Result:=List(userId,_Q);
end;

Function TUsersDraftsResource.Send(userId: string; aDraft : TDraft) : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/drafts/send';
  _Methodid   = 'gmail.users.drafts.send';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aDraft,TMessage) as TMessage;
end;

Function TUsersDraftsResource.Update(id: string; userId: string; aDraft : TDraft) : TDraft;

Const
  _HTTPMethod = 'PUT';
  _Path       = '{userId}/drafts/{id}';
  _Methodid   = 'gmail.users.drafts.update';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aDraft,TDraft) as TDraft;
end;



{ --------------------------------------------------------------------
  TUsersHistoryResource
  --------------------------------------------------------------------}


Class Function TUsersHistoryResource.ResourceName : String;

begin
  Result:='history';
end;

Class Function TUsersHistoryResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Function TUsersHistoryResource.List(userId: string; AQuery : string = '') : TListHistoryResponse;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/history';
  _Methodid   = 'gmail.users.history.list';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TListHistoryResponse) as TListHistoryResponse;
end;


Function TUsersHistoryResource.List(userId: string; AQuery : TUsersHistorylistOptions) : TListHistoryResponse;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'labelId',AQuery.labelId);
  AddToQuery(_Q,'maxResults',AQuery.maxResults);
  AddToQuery(_Q,'pageToken',AQuery.pageToken);
  AddToQuery(_Q,'startHistoryId',AQuery.startHistoryId);
  Result:=List(userId,_Q);
end;



{ --------------------------------------------------------------------
  TUsersLabelsResource
  --------------------------------------------------------------------}


Class Function TUsersLabelsResource.ResourceName : String;

begin
  Result:='labels';
end;

Class Function TUsersLabelsResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Function TUsersLabelsResource.Create(userId: string; aLabel : TLabel) : TLabel;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/labels';
  _Methodid   = 'gmail.users.labels.create';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aLabel,TLabel) as TLabel;
end;

Procedure TUsersLabelsResource.Delete(id: string; userId: string);

Const
  _HTTPMethod = 'DELETE';
  _Path       = '{userId}/labels/{id}';
  _Methodid   = 'gmail.users.labels.delete';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  ServiceCall(_HTTPMethod,_P,'',Nil,Nil);
end;

Function TUsersLabelsResource.Get(id: string; userId: string) : TLabel;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/labels/{id}';
  _Methodid   = 'gmail.users.labels.get';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TLabel) as TLabel;
end;

Function TUsersLabelsResource.List(userId: string) : TListLabelsResponse;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/labels';
  _Methodid   = 'gmail.users.labels.list';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TListLabelsResponse) as TListLabelsResponse;
end;

Function TUsersLabelsResource.Patch(id: string; userId: string; aLabel : TLabel) : TLabel;

Const
  _HTTPMethod = 'PATCH';
  _Path       = '{userId}/labels/{id}';
  _Methodid   = 'gmail.users.labels.patch';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aLabel,TLabel) as TLabel;
end;

Function TUsersLabelsResource.Update(id: string; userId: string; aLabel : TLabel) : TLabel;

Const
  _HTTPMethod = 'PUT';
  _Path       = '{userId}/labels/{id}';
  _Methodid   = 'gmail.users.labels.update';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aLabel,TLabel) as TLabel;
end;



{ --------------------------------------------------------------------
  TUsersMessagesAttachmentsResource
  --------------------------------------------------------------------}


Class Function TUsersMessagesAttachmentsResource.ResourceName : String;

begin
  Result:='attachments';
end;

Class Function TUsersMessagesAttachmentsResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Function TUsersMessagesAttachmentsResource.Get(id: string; messageId: string; userId: string) : TMessagePartBody;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/messages/{messageId}/attachments/{id}';
  _Methodid   = 'gmail.users.messages.attachments.get';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'messageId',messageId,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TMessagePartBody) as TMessagePartBody;
end;



{ --------------------------------------------------------------------
  TUsersMessagesResource
  --------------------------------------------------------------------}


Class Function TUsersMessagesResource.ResourceName : String;

begin
  Result:='messages';
end;

Class Function TUsersMessagesResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Procedure TUsersMessagesResource.BatchDelete(userId: string; aBatchDeleteMessagesRequest : TBatchDeleteMessagesRequest);

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages/batchDelete';
  _Methodid   = 'gmail.users.messages.batchDelete';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  ServiceCall(_HTTPMethod,_P,'',aBatchDeleteMessagesRequest,Nil);
end;

Procedure TUsersMessagesResource.Delete(id: string; userId: string);

Const
  _HTTPMethod = 'DELETE';
  _Path       = '{userId}/messages/{id}';
  _Methodid   = 'gmail.users.messages.delete';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  ServiceCall(_HTTPMethod,_P,'',Nil,Nil);
end;

Function TUsersMessagesResource.Get(id: string; userId: string; AQuery : string = '') : TMessage;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/messages/{id}';
  _Methodid   = 'gmail.users.messages.get';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TMessage) as TMessage;
end;


Function TUsersMessagesResource.Get(id: string; userId: string; AQuery : TUsersMessagesgetOptions) : TMessage;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'format',AQuery.format);
  AddToQuery(_Q,'metadataHeaders',AQuery.metadataHeaders);
  Result:=Get(id,userId,_Q);
end;

Function TUsersMessagesResource.Import(userId: string; aMessage : TMessage; AQuery : string = '') : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages/import';
  _Methodid   = 'gmail.users.messages.import';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,aMessage,TMessage) as TMessage;
end;


Function TUsersMessagesResource.Import(userId: string; aMessage : TMessage; AQuery : TUsersMessagesimportOptions) : TMessage;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'deleted',AQuery.deleted);
  AddToQuery(_Q,'internalDateSource',AQuery.internalDateSource);
  AddToQuery(_Q,'neverMarkSpam',AQuery.neverMarkSpam);
  AddToQuery(_Q,'processForCalendar',AQuery.processForCalendar);
  Result:=Import(userId,aMessage,_Q);
end;

Function TUsersMessagesResource.Insert(userId: string; aMessage : TMessage; AQuery : string = '') : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages';
  _Methodid   = 'gmail.users.messages.insert';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,aMessage,TMessage) as TMessage;
end;


Function TUsersMessagesResource.Insert(userId: string; aMessage : TMessage; AQuery : TUsersMessagesinsertOptions) : TMessage;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'deleted',AQuery.deleted);
  AddToQuery(_Q,'internalDateSource',AQuery.internalDateSource);
  Result:=Insert(userId,aMessage,_Q);
end;

Function TUsersMessagesResource.List(userId: string; AQuery : string = '') : TListMessagesResponse;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/messages';
  _Methodid   = 'gmail.users.messages.list';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TListMessagesResponse) as TListMessagesResponse;
end;


Function TUsersMessagesResource.List(userId: string; AQuery : TUsersMessageslistOptions) : TListMessagesResponse;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'includeSpamTrash',AQuery.includeSpamTrash);
  AddToQuery(_Q,'labelIds',AQuery.labelIds);
  AddToQuery(_Q,'maxResults',AQuery.maxResults);
  AddToQuery(_Q,'pageToken',AQuery.pageToken);
  AddToQuery(_Q,'q',AQuery.q);
  Result:=List(userId,_Q);
end;

Function TUsersMessagesResource.Modify(id: string; userId: string; aModifyMessageRequest : TModifyMessageRequest) : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages/{id}/modify';
  _Methodid   = 'gmail.users.messages.modify';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aModifyMessageRequest,TMessage) as TMessage;
end;

Function TUsersMessagesResource.Send(userId: string; aMessage : TMessage) : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages/send';
  _Methodid   = 'gmail.users.messages.send';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aMessage,TMessage) as TMessage;
end;

Function TUsersMessagesResource.Trash(id: string; userId: string) : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages/{id}/trash';
  _Methodid   = 'gmail.users.messages.trash';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TMessage) as TMessage;
end;

Function TUsersMessagesResource.Untrash(id: string; userId: string) : TMessage;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/messages/{id}/untrash';
  _Methodid   = 'gmail.users.messages.untrash';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TMessage) as TMessage;
end;



Function TUsersMessagesResource.GetAttachmentsInstance : TUsersMessagesAttachmentsResource;

begin
  if (FAttachmentsInstance=Nil) then
    FAttachmentsInstance:=CreateAttachmentsResource;
  Result:=FAttachmentsInstance;
end;

Function TUsersMessagesResource.CreateAttachmentsResource : TUsersMessagesAttachmentsResource;

begin
  Result:=CreateAttachmentsResource(Self);
end;


Function TUsersMessagesResource.CreateAttachmentsResource(AOwner : TComponent) : TUsersMessagesAttachmentsResource;

begin
  Result:=TUsersMessagesAttachmentsResource.Create(AOwner);
  Result.API:=Self.API;
end;



{ --------------------------------------------------------------------
  TUsersThreadsResource
  --------------------------------------------------------------------}


Class Function TUsersThreadsResource.ResourceName : String;

begin
  Result:='threads';
end;

Class Function TUsersThreadsResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Procedure TUsersThreadsResource.Delete(id: string; userId: string);

Const
  _HTTPMethod = 'DELETE';
  _Path       = '{userId}/threads/{id}';
  _Methodid   = 'gmail.users.threads.delete';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  ServiceCall(_HTTPMethod,_P,'',Nil,Nil);
end;

Function TUsersThreadsResource.Get(id: string; userId: string; AQuery : string = '') : TThread;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/threads/{id}';
  _Methodid   = 'gmail.users.threads.get';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TThread) as TThread;
end;


Function TUsersThreadsResource.Get(id: string; userId: string; AQuery : TUsersThreadsgetOptions) : TThread;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'format',AQuery.format);
  AddToQuery(_Q,'metadataHeaders',AQuery.metadataHeaders);
  Result:=Get(id,userId,_Q);
end;

Function TUsersThreadsResource.List(userId: string; AQuery : string = '') : TListThreadsResponse;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/threads';
  _Methodid   = 'gmail.users.threads.list';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,AQuery,Nil,TListThreadsResponse) as TListThreadsResponse;
end;


Function TUsersThreadsResource.List(userId: string; AQuery : TUsersThreadslistOptions) : TListThreadsResponse;

Var
  _Q : String;

begin
  _Q:='';
  AddToQuery(_Q,'includeSpamTrash',AQuery.includeSpamTrash);
  AddToQuery(_Q,'labelIds',AQuery.labelIds);
  AddToQuery(_Q,'maxResults',AQuery.maxResults);
  AddToQuery(_Q,'pageToken',AQuery.pageToken);
  AddToQuery(_Q,'q',AQuery.q);
  Result:=List(userId,_Q);
end;

Function TUsersThreadsResource.Modify(id: string; userId: string; aModifyThreadRequest : TModifyThreadRequest) : TThread;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/threads/{id}/modify';
  _Methodid   = 'gmail.users.threads.modify';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aModifyThreadRequest,TThread) as TThread;
end;

Function TUsersThreadsResource.Trash(id: string; userId: string) : TThread;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/threads/{id}/trash';
  _Methodid   = 'gmail.users.threads.trash';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TThread) as TThread;
end;

Function TUsersThreadsResource.Untrash(id: string; userId: string) : TThread;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/threads/{id}/untrash';
  _Methodid   = 'gmail.users.threads.untrash';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['id',id,'userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TThread) as TThread;
end;



{ --------------------------------------------------------------------
  TUsersResource
  --------------------------------------------------------------------}


Class Function TUsersResource.ResourceName : String;

begin
  Result:='users';
end;

Class Function TUsersResource.DefaultAPI : TGoogleAPIClass;

begin
  Result:=TgmailAPI;
end;

Function TUsersResource.GetProfile(userId: string) : TProfile;

Const
  _HTTPMethod = 'GET';
  _Path       = '{userId}/profile';
  _Methodid   = 'gmail.users.getProfile';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',Nil,TProfile) as TProfile;
end;

Procedure TUsersResource.Stop(userId: string);

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/stop';
  _Methodid   = 'gmail.users.stop';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  ServiceCall(_HTTPMethod,_P,'',Nil,Nil);
end;

Function TUsersResource.Watch(userId: string; aWatchRequest : TWatchRequest) : TWatchResponse;

Const
  _HTTPMethod = 'POST';
  _Path       = '{userId}/watch';
  _Methodid   = 'gmail.users.watch';

Var
  _P : String;

begin
  _P:=SubstitutePath(_Path,['userId',userId]);
  Result:=ServiceCall(_HTTPMethod,_P,'',aWatchRequest,TWatchResponse) as TWatchResponse;
end;



Function TUsersResource.GetDraftsInstance : TUsersDraftsResource;

begin
  if (FDraftsInstance=Nil) then
    FDraftsInstance:=CreateDraftsResource;
  Result:=FDraftsInstance;
end;

Function TUsersResource.CreateDraftsResource : TUsersDraftsResource;

begin
  Result:=CreateDraftsResource(Self);
end;


Function TUsersResource.CreateDraftsResource(AOwner : TComponent) : TUsersDraftsResource;

begin
  Result:=TUsersDraftsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TUsersResource.GetHistoryInstance : TUsersHistoryResource;

begin
  if (FHistoryInstance=Nil) then
    FHistoryInstance:=CreateHistoryResource;
  Result:=FHistoryInstance;
end;

Function TUsersResource.CreateHistoryResource : TUsersHistoryResource;

begin
  Result:=CreateHistoryResource(Self);
end;


Function TUsersResource.CreateHistoryResource(AOwner : TComponent) : TUsersHistoryResource;

begin
  Result:=TUsersHistoryResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TUsersResource.GetLabelsInstance : TUsersLabelsResource;

begin
  if (FLabelsInstance=Nil) then
    FLabelsInstance:=CreateLabelsResource;
  Result:=FLabelsInstance;
end;

Function TUsersResource.CreateLabelsResource : TUsersLabelsResource;

begin
  Result:=CreateLabelsResource(Self);
end;


Function TUsersResource.CreateLabelsResource(AOwner : TComponent) : TUsersLabelsResource;

begin
  Result:=TUsersLabelsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TUsersResource.GetMessagesAttachmentsInstance : TUsersMessagesAttachmentsResource;

begin
  if (FMessagesAttachmentsInstance=Nil) then
    FMessagesAttachmentsInstance:=CreateMessagesAttachmentsResource;
  Result:=FMessagesAttachmentsInstance;
end;

Function TUsersResource.CreateMessagesAttachmentsResource : TUsersMessagesAttachmentsResource;

begin
  Result:=CreateMessagesAttachmentsResource(Self);
end;


Function TUsersResource.CreateMessagesAttachmentsResource(AOwner : TComponent) : TUsersMessagesAttachmentsResource;

begin
  Result:=TUsersMessagesAttachmentsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TUsersResource.GetMessagesInstance : TUsersMessagesResource;

begin
  if (FMessagesInstance=Nil) then
    FMessagesInstance:=CreateMessagesResource;
  Result:=FMessagesInstance;
end;

Function TUsersResource.CreateMessagesResource : TUsersMessagesResource;

begin
  Result:=CreateMessagesResource(Self);
end;


Function TUsersResource.CreateMessagesResource(AOwner : TComponent) : TUsersMessagesResource;

begin
  Result:=TUsersMessagesResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TUsersResource.GetThreadsInstance : TUsersThreadsResource;

begin
  if (FThreadsInstance=Nil) then
    FThreadsInstance:=CreateThreadsResource;
  Result:=FThreadsInstance;
end;

Function TUsersResource.CreateThreadsResource : TUsersThreadsResource;

begin
  Result:=CreateThreadsResource(Self);
end;


Function TUsersResource.CreateThreadsResource(AOwner : TComponent) : TUsersThreadsResource;

begin
  Result:=TUsersThreadsResource.Create(AOwner);
  Result.API:=Self.API;
end;



{ --------------------------------------------------------------------
  TGmailAPI
  --------------------------------------------------------------------}

Class Function TGmailAPI.APIName : String;

begin
  Result:='gmail';
end;

Class Function TGmailAPI.APIVersion : String;

begin
  Result:='v1';
end;

Class Function TGmailAPI.APIRevision : String;

begin
  Result:='20160316';
end;

Class Function TGmailAPI.APIID : String;

begin
  Result:='gmail:v1';
end;

Class Function TGmailAPI.APITitle : String;

begin
  Result:='Gmail API';
end;

Class Function TGmailAPI.APIDescription : String;

begin
  Result:='Access Gmail mailboxes including sending user email.';
end;

Class Function TGmailAPI.APIOwnerDomain : String;

begin
  Result:='google.com';
end;

Class Function TGmailAPI.APIOwnerName : String;

begin
  Result:='Google';
end;

Class Function TGmailAPI.APIIcon16 : String;

begin
  Result:='https://www.google.com/images/icons/product/googlemail-16.png';
end;

Class Function TGmailAPI.APIIcon32 : String;

begin
  Result:='https://www.google.com/images/icons/product/googlemail-32.png';
end;

Class Function TGmailAPI.APIdocumentationLink : String;

begin
  Result:='https://developers.google.com/gmail/api/';
end;

Class Function TGmailAPI.APIrootUrl : string;

begin
  Result:='https://www.googleapis.com/';
end;

Class Function TGmailAPI.APIbasePath : string;

begin
  Result:='/gmail/v1/users/';
end;

Class Function TGmailAPI.APIbaseURL : String;

begin
  Result:='https://www.googleapis.com/gmail/v1/users/';
end;

Class Function TGmailAPI.APIProtocol : string;

begin
  Result:='rest';
end;

Class Function TGmailAPI.APIservicePath : string;

begin
  Result:='gmail/v1/users/';
end;

Class Function TGmailAPI.APIbatchPath : String;

begin
  Result:='batch';
end;

Class Function TGmailAPI.APIAuthScopes : TScopeInfoArray;

begin
  SetLength(Result,7);
  Result[0].Name:='https://mail.google.com/';
  Result[0].Description:='View and manage your mail';
  Result[1].Name:='https://www.googleapis.com/auth/gmail.compose';
  Result[1].Description:='Manage drafts and send emails';
  Result[2].Name:='https://www.googleapis.com/auth/gmail.insert';
  Result[2].Description:='Insert mail into your mailbox';
  Result[3].Name:='https://www.googleapis.com/auth/gmail.labels';
  Result[3].Description:='Manage mailbox labels';
  Result[4].Name:='https://www.googleapis.com/auth/gmail.modify';
  Result[4].Description:='View and modify but not delete your email';
  Result[5].Name:='https://www.googleapis.com/auth/gmail.readonly';
  Result[5].Description:='View your emails messages and settings';
  Result[6].Name:='https://www.googleapis.com/auth/gmail.send';
  Result[6].Description:='Send email on your behalf';
  
end;

Class Function TGmailAPI.APINeedsAuth : Boolean;

begin
  Result:=True;
end;

Class Procedure TGmailAPI.RegisterAPIResources;

begin
  TBatchDeleteMessagesRequest.RegisterObject;
  TDraft.RegisterObject;
  THistory.RegisterObject;
  THistoryLabelAdded.RegisterObject;
  THistoryLabelRemoved.RegisterObject;
  THistoryMessageAdded.RegisterObject;
  THistoryMessageDeleted.RegisterObject;
  TLabel.RegisterObject;
  TListDraftsResponse.RegisterObject;
  TListHistoryResponse.RegisterObject;
  TListLabelsResponse.RegisterObject;
  TListMessagesResponse.RegisterObject;
  TListThreadsResponse.RegisterObject;
  TMessage.RegisterObject;
  TMessagePart.RegisterObject;
  TMessagePartBody.RegisterObject;
  TMessagePartHeader.RegisterObject;
  TModifyMessageRequest.RegisterObject;
  TModifyThreadRequest.RegisterObject;
  TProfile.RegisterObject;
  TThread.RegisterObject;
  TWatchRequest.RegisterObject;
  TWatchResponse.RegisterObject;
end;


Function TGmailAPI.GetUsersDraftsInstance : TUsersDraftsResource;

begin
  if (FUsersDraftsInstance=Nil) then
    FUsersDraftsInstance:=CreateUsersDraftsResource;
  Result:=FUsersDraftsInstance;
end;

Function TGmailAPI.CreateUsersDraftsResource : TUsersDraftsResource;

begin
  Result:=CreateUsersDraftsResource(Self);
end;


Function TGmailAPI.CreateUsersDraftsResource(AOwner : TComponent) : TUsersDraftsResource;

begin
  Result:=TUsersDraftsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TGmailAPI.GetUsersHistoryInstance : TUsersHistoryResource;

begin
  if (FUsersHistoryInstance=Nil) then
    FUsersHistoryInstance:=CreateUsersHistoryResource;
  Result:=FUsersHistoryInstance;
end;

Function TGmailAPI.CreateUsersHistoryResource : TUsersHistoryResource;

begin
  Result:=CreateUsersHistoryResource(Self);
end;


Function TGmailAPI.CreateUsersHistoryResource(AOwner : TComponent) : TUsersHistoryResource;

begin
  Result:=TUsersHistoryResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TGmailAPI.GetUsersLabelsInstance : TUsersLabelsResource;

begin
  if (FUsersLabelsInstance=Nil) then
    FUsersLabelsInstance:=CreateUsersLabelsResource;
  Result:=FUsersLabelsInstance;
end;

Function TGmailAPI.CreateUsersLabelsResource : TUsersLabelsResource;

begin
  Result:=CreateUsersLabelsResource(Self);
end;


Function TGmailAPI.CreateUsersLabelsResource(AOwner : TComponent) : TUsersLabelsResource;

begin
  Result:=TUsersLabelsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TGmailAPI.GetUsersMessagesAttachmentsInstance : TUsersMessagesAttachmentsResource;

begin
  if (FUsersMessagesAttachmentsInstance=Nil) then
    FUsersMessagesAttachmentsInstance:=CreateUsersMessagesAttachmentsResource;
  Result:=FUsersMessagesAttachmentsInstance;
end;

Function TGmailAPI.CreateUsersMessagesAttachmentsResource : TUsersMessagesAttachmentsResource;

begin
  Result:=CreateUsersMessagesAttachmentsResource(Self);
end;


Function TGmailAPI.CreateUsersMessagesAttachmentsResource(AOwner : TComponent) : TUsersMessagesAttachmentsResource;

begin
  Result:=TUsersMessagesAttachmentsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TGmailAPI.GetUsersMessagesInstance : TUsersMessagesResource;

begin
  if (FUsersMessagesInstance=Nil) then
    FUsersMessagesInstance:=CreateUsersMessagesResource;
  Result:=FUsersMessagesInstance;
end;

Function TGmailAPI.CreateUsersMessagesResource : TUsersMessagesResource;

begin
  Result:=CreateUsersMessagesResource(Self);
end;


Function TGmailAPI.CreateUsersMessagesResource(AOwner : TComponent) : TUsersMessagesResource;

begin
  Result:=TUsersMessagesResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TGmailAPI.GetUsersThreadsInstance : TUsersThreadsResource;

begin
  if (FUsersThreadsInstance=Nil) then
    FUsersThreadsInstance:=CreateUsersThreadsResource;
  Result:=FUsersThreadsInstance;
end;

Function TGmailAPI.CreateUsersThreadsResource : TUsersThreadsResource;

begin
  Result:=CreateUsersThreadsResource(Self);
end;


Function TGmailAPI.CreateUsersThreadsResource(AOwner : TComponent) : TUsersThreadsResource;

begin
  Result:=TUsersThreadsResource.Create(AOwner);
  Result.API:=Self.API;
end;



Function TGmailAPI.GetUsersInstance : TUsersResource;

begin
  if (FUsersInstance=Nil) then
    FUsersInstance:=CreateUsersResource;
  Result:=FUsersInstance;
end;

Function TGmailAPI.CreateUsersResource : TUsersResource;

begin
  Result:=CreateUsersResource(Self);
end;


Function TGmailAPI.CreateUsersResource(AOwner : TComponent) : TUsersResource;

begin
  Result:=TUsersResource.Create(AOwner);
  Result.API:=Self.API;
end;



initialization
  TGmailAPI.RegisterAPI;
end.