text: // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  // the License. You may obtain a copy of the License at
  //
  // http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  // an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  // specific language governing permissions and limitations under the License.
  
  // Generated code. DO NOT EDIT!
  
  namespace Google.Apis.DisplayVideo.v1beta2
  {
      /// <summary>The DisplayVideo Service.</summary>
      public class DisplayVideoService : Google.Apis.Services.BaseClientService
      {
          /// <summary>The API version.</summary>
          public const string Version = "v1beta2";
  
          /// <summary>The discovery version used to generate this service.</summary>
          public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed = Google.Apis.Discovery.DiscoveryVersion.Version_1_0;
  
          /// <summary>Constructs a new service.</summary>
          public DisplayVideoService() : this(new Google.Apis.Services.BaseClientService.Initializer())
          {
          }
  
          /// <summary>Constructs a new service.</summary>
          /// <param name="initializer">The service initializer.</param>
          public DisplayVideoService(Google.Apis.Services.BaseClientService.Initializer initializer) : base(initializer)
          {
              Media = new MediaResource(this);
              Sdfdownloadtasks = new SdfdownloadtasksResource(this);
          }
  
          /// <summary>Gets the service supported features.</summary>
          public override System.Collections.Generic.IList<string> Features => new string[0];
  
          /// <summary>Gets the service name.</summary>
          public override string Name => "displayvideo";
  
          /// <summary>Gets the service base URI.</summary>
          public override string BaseUri =>
          #if NETSTANDARD1_3 || NETSTANDARD2_0 || NET45
              BaseUriOverride ?? "https://displayvideo.googleapis.com/";
          #else
              "https://displayvideo.googleapis.com/";
          #endif
  
          /// <summary>Gets the service base path.</summary>
          public override string BasePath => "";
  
          #if !NET40
          /// <summary>Gets the batch base URI; <c>null</c> if unspecified.</summary>
          public override string BatchUri => "https://displayvideo.googleapis.com/batch";
  
          /// <summary>Gets the batch base path; <c>null</c> if unspecified.</summary>
          public override string BatchPath => "batch";
          #endif
  
          /// <summary>Available OAuth 2.0 scopes for use with the Display & Video 360 API.</summary>
          public class Scope
          {
              /// <summary>Create, see, edit, and permanently delete your Display & Video 360 entities and
              /// reports</summary>
              public static string DisplayVideo = "https://www.googleapis.com/auth/display-video";
  
              /// <summary>View and manage your reports in DoubleClick Bid Manager</summary>
              public static string Doubleclickbidmanager = "https://www.googleapis.com/auth/doubleclickbidmanager";
  
          }
  
          /// <summary>Available OAuth 2.0 scope constants for use with the Display & Video 360 API.</summary>
          public static class ScopeConstants
          {
              /// <summary>Create, see, edit, and permanently delete your Display & Video 360 entities and
              /// reports</summary>
              public const string DisplayVideo = "https://www.googleapis.com/auth/display-video";
  
              /// <summary>View and manage your reports in DoubleClick Bid Manager</summary>
              public const string Doubleclickbidmanager = "https://www.googleapis.com/auth/doubleclickbidmanager";
  
          }
  
  
  
          /// <summary>Gets the Media resource.</summary>
          public virtual MediaResource Media { get; }
  
          /// <summary>Gets the Sdfdownloadtasks resource.</summary>
          public virtual SdfdownloadtasksResource Sdfdownloadtasks { get; }
      }
  
      /// <summary>A base abstract class for DisplayVideo requests.</summary>
      public abstract class DisplayVideoBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
      {
          /// <summary>Constructs a new DisplayVideoBaseServiceRequest instance.</summary>
          protected DisplayVideoBaseServiceRequest(Google.Apis.Services.IClientService service) : base(service)
          {
          }
  
          /// <summary>V1 error format.</summary>
          [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
          public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }
  
          /// <summary>V1 error format.</summary>
          public enum XgafvEnum
          {
              /// <summary>v1 error format</summary>
              [Google.Apis.Util.StringValueAttribute("1")]
              Value1,
              /// <summary>v2 error format</summary>
              [Google.Apis.Util.StringValueAttribute("2")]
              Value2,
          }
  
          /// <summary>OAuth access token.</summary>
          [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string AccessToken { get; set; }
  
          /// <summary>Data format for response.</summary>
          [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
          public virtual System.Nullable<AltEnum> Alt { get; set; }
  
          /// <summary>Data format for response.</summary>
          public enum AltEnum
          {
              /// <summary>Responses with Content-Type of application/json</summary>
              [Google.Apis.Util.StringValueAttribute("json")]
              Json,
              /// <summary>Media download with context-dependent Content-Type</summary>
              [Google.Apis.Util.StringValueAttribute("media")]
              Media,
              /// <summary>Responses with Content-Type of application/x-protobuf</summary>
              [Google.Apis.Util.StringValueAttribute("proto")]
              Proto,
          }
  
          /// <summary>JSONP</summary>
          [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string Callback { get; set; }
  
          /// <summary>Selector specifying which fields to include in a partial response.</summary>
          [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string Fields { get; set; }
  
          /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
          /// Required unless you provide an OAuth 2.0 token.</summary>
          [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string Key { get; set; }
  
          /// <summary>OAuth 2.0 token for the current user.</summary>
          [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string OauthToken { get; set; }
  
          /// <summary>Returns response with indentations and line breaks.</summary>
          [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
          public virtual System.Nullable<bool> PrettyPrint { get; set; }
  
          /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
          /// assigned to a user, but should not exceed 40 characters.</summary>
          [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string QuotaUser { get; set; }
  
          /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
          [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string UploadType { get; set; }
  
          /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
          [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
          public virtual string UploadProtocol { get; set; }
  
          /// <summary>Initializes DisplayVideo parameter list.</summary>
          protected override void InitParameters()
          {
              base.InitParameters();
  
              RequestParameters.Add("$.xgafv", new Google.Apis.Discovery.Parameter
              {
                  Name = "$.xgafv",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("access_token", new Google.Apis.Discovery.Parameter
              {
                  Name = "access_token",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("alt", new Google.Apis.Discovery.Parameter
              {
                  Name = "alt",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = "json",
                  Pattern = null,
              });
              RequestParameters.Add("callback", new Google.Apis.Discovery.Parameter
              {
                  Name = "callback",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("fields", new Google.Apis.Discovery.Parameter
              {
                  Name = "fields",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("key", new Google.Apis.Discovery.Parameter
              {
                  Name = "key",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("oauth_token", new Google.Apis.Discovery.Parameter
              {
                  Name = "oauth_token",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("prettyPrint", new Google.Apis.Discovery.Parameter
              {
                  Name = "prettyPrint",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = "true",
                  Pattern = null,
              });
              RequestParameters.Add("quotaUser", new Google.Apis.Discovery.Parameter
              {
                  Name = "quotaUser",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("uploadType", new Google.Apis.Discovery.Parameter
              {
                  Name = "uploadType",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
              RequestParameters.Add("upload_protocol", new Google.Apis.Discovery.Parameter
              {
                  Name = "upload_protocol",
                  IsRequired = false,
                  ParameterType = "query",
                  DefaultValue = null,
                  Pattern = null,
              });
          }
      }
  
      /// <summary>The "media" collection of methods.</summary>
      public class MediaResource
      {
          private const string Resource = "media";
  
          /// <summary>The service which this resource belongs to.</summary>
          private readonly Google.Apis.Services.IClientService service;
  
          /// <summary>Constructs a new resource.</summary>
          public MediaResource(Google.Apis.Services.IClientService service)
          {
              this.service = service;
  
          }
  
  
          /// <summary>Downloads media. Download is supported on the URI `/download/{resource_name=**}?alt=media.`
          /// **Note**: Download requests will not be successful without including `alt=media` query string.</summary>
          /// <param name="resourceName">Name of the media that is being downloaded. See ReadRequest.resource_name.</param>
          public virtual DownloadRequest Download(string resourceName)
          {
              return new DownloadRequest(service, resourceName);
          }
  
          /// <summary>Downloads media. Download is supported on the URI `/download/{resource_name=**}?alt=media.`
          /// **Note**: Download requests will not be successful without including `alt=media` query string.</summary>
          public class DownloadRequest : DisplayVideoBaseServiceRequest<Google.Apis.DisplayVideo.v1beta2.Data.GoogleBytestreamMedia>
          {
              /// <summary>Constructs a new Download request.</summary>
              public DownloadRequest(Google.Apis.Services.IClientService service, string resourceName) : base(service)
              {
                  ResourceName = resourceName;
                  MediaDownloader = new Google.Apis.Download.MediaDownloader(service);
                  InitParameters();
              }
  
  
              /// <summary>Name of the media that is being downloaded. See ReadRequest.resource_name.</summary>
              [Google.Apis.Util.RequestParameterAttribute("resourceName", Google.Apis.Util.RequestParameterType.Path)]
              public virtual string ResourceName { get; private set; }
  
  
              /// <summary>Gets the method name.</summary>
              public override string MethodName => "download";
  
              /// <summary>Gets the HTTP method.</summary>
              public override string HttpMethod => "GET";
  
              /// <summary>Gets the REST path.</summary>
              public override string RestPath => "download/{+resourceName}";
  
              /// <summary>Initializes Download parameter list.</summary>
              protected override void InitParameters()
              {
                  base.InitParameters();
  
                  RequestParameters.Add("resourceName", new Google.Apis.Discovery.Parameter
                  {
                      Name = "resourceName",
                      IsRequired = true,
                      ParameterType = "path",
                      DefaultValue = null,
                      Pattern = @"^.*$",
                  });
              }
  
              /// <summary>Gets the media downloader.</summary>
              public Google.Apis.Download.IMediaDownloader MediaDownloader { get; private set; }
  
              /// <summary>
              /// <para>Synchronously download the media into the given stream.</para>
              /// <para>Warning: This method hides download errors; use <see cref="DownloadWithStatus"/> instead.</para>
              /// </summary>
              public virtual void Download(System.IO.Stream stream)
              {
                  MediaDownloader.Download(this.GenerateRequestUri(), stream);
              }
  
              /// <summary>Synchronously download the media into the given stream.</summary>
              /// <returns>The final status of the download; including whether the download succeeded or failed.</returns>
              public virtual Google.Apis.Download.IDownloadProgress DownloadWithStatus(System.IO.Stream stream)
              {
                  return MediaDownloader.Download(this.GenerateRequestUri(), stream);
              }
  
              /// <summary>Asynchronously download the media into the given stream.</summary>
              public virtual System.Threading.Tasks.Task<Google.Apis.Download.IDownloadProgress> DownloadAsync(System.IO.Stream stream)
              {
                  return MediaDownloader.DownloadAsync(this.GenerateRequestUri(), stream);
              }
  
              /// <summary>Asynchronously download the media into the given stream.</summary>
              public virtual System.Threading.Tasks.Task<Google.Apis.Download.IDownloadProgress> DownloadAsync(System.IO.Stream stream,
                  System.Threading.CancellationToken cancellationToken)
              {
                  return MediaDownloader.DownloadAsync(this.GenerateRequestUri(), stream, cancellationToken);
              }
  
              #if !NET40
              /// <summary>Synchronously download a range of the media into the given stream.</summary>
              public virtual Google.Apis.Download.IDownloadProgress DownloadRange(System.IO.Stream stream, System.Net.Http.Headers.RangeHeaderValue range)
              {
                  var mediaDownloader = new Google.Apis.Download.MediaDownloader(Service);
                  mediaDownloader.Range = range;
                  return mediaDownloader.Download(this.GenerateRequestUri(), stream);
              }
  
              /// <summary>Asynchronously download a range of the media into the given stream.</summary>
              public virtual System.Threading.Tasks.Task<Google.Apis.Download.IDownloadProgress> DownloadRangeAsync(System.IO.Stream stream,
                  System.Net.Http.Headers.RangeHeaderValue range,
                  System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
              {
                  var mediaDownloader = new Google.Apis.Download.MediaDownloader(Service);
                  mediaDownloader.Range = range;
                  return mediaDownloader.DownloadAsync(this.GenerateRequestUri(), stream, cancellationToken);
              }
              #endif
  
          }
      }
  
      /// <summary>The "sdfdownloadtasks" collection of methods.</summary>
      public class SdfdownloadtasksResource
      {
          private const string Resource = "sdfdownloadtasks";
  
          /// <summary>The service which this resource belongs to.</summary>
          private readonly Google.Apis.Services.IClientService service;
  
          /// <summary>Constructs a new resource.</summary>
          public SdfdownloadtasksResource(Google.Apis.Services.IClientService service)
          {
              this.service = service;
              Operations = new OperationsResource(service);
  
          }
  
          /// <summary>Gets the Operations resource.</summary>
          public virtual OperationsResource Operations { get; }
  
          /// <summary>The "operations" collection of methods.</summary>
          public class OperationsResource
          {
              private const string Resource = "operations";
  
              /// <summary>The service which this resource belongs to.</summary>
              private readonly Google.Apis.Services.IClientService service;
  
              /// <summary>Constructs a new resource.</summary>
              public OperationsResource(Google.Apis.Services.IClientService service)
              {
                  this.service = service;
  
              }
  
  
              /// <summary>Gets the latest state of an asynchronous SDF download task operation. Clients should poll this
              /// method at intervals of 30 seconds.</summary>
              /// <param name="name">The name of the operation resource.</param>
              public virtual GetRequest Get(string name)
              {
                  return new GetRequest(service, name);
              }
  
              /// <summary>Gets the latest state of an asynchronous SDF download task operation. Clients should poll this
              /// method at intervals of 30 seconds.</summary>
              public class GetRequest : DisplayVideoBaseServiceRequest<Google.Apis.DisplayVideo.v1beta2.Data.Operation>
              {
                  /// <summary>Constructs a new Get request.</summary>
                  public GetRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                  {
                      Name = name;
                      InitParameters();
                  }
  
  
                  /// <summary>The name of the operation resource.</summary>
                  [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                  public virtual string Name { get; private set; }
  
  
                  /// <summary>Gets the method name.</summary>
                  public override string MethodName => "get";
  
                  /// <summary>Gets the HTTP method.</summary>
                  public override string HttpMethod => "GET";
  
                  /// <summary>Gets the REST path.</summary>
                  public override string RestPath => "v1beta2/{+name}";
  
                  /// <summary>Initializes Get parameter list.</summary>
                  protected override void InitParameters()
                  {
                      base.InitParameters();
  
                      RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                      {
                          Name = "name",
                          IsRequired = true,
                          ParameterType = "path",
                          DefaultValue = null,
                          Pattern = @"^sdfdownloadtasks/operations/[^/]+$",
                      });
                  }
  
              }
          }
      }
  }
  
  namespace Google.Apis.DisplayVideo.v1beta2.Data
  {    
  
      /// <summary>Media resource.</summary>
      public class GoogleBytestreamMedia : Google.Apis.Requests.IDirectResponseSchema
      {
          /// <summary>Name of the media resource.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("resourceName")]
          public virtual string ResourceName { get; set; }
  
          /// <summary>The ETag of the item.</summary>
          public virtual string ETag { get; set; }
      }    
  
      /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
      public class Operation : Google.Apis.Requests.IDirectResponseSchema
      {
          /// <summary>If the value is `false`, it means the operation is still in progress. If `true`, the operation is
          /// completed, and either `error` or `response` is available.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("done")]
          public virtual System.Nullable<bool> Done { get; set; }
  
          /// <summary>The error result of the operation in case of failure or cancellation.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("error")]
          public virtual Status Error { get; set; }
  
          /// <summary>Service-specific metadata associated with the operation. It typically contains progress information
          /// and common metadata such as create time. Some services might not provide such metadata. Any method that
          /// returns a long-running operation should document the metadata type, if any.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
          public virtual System.Collections.Generic.IDictionary<string, object> Metadata { get; set; }
  
          /// <summary>The server-assigned name, which is only unique within the same service that originally returns it.
          /// If you use the default HTTP mapping, the `name` should be a resource name ending with
          /// `operations/{unique_id}`.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("name")]
          public virtual string Name { get; set; }
  
          /// <summary>The normal response of the operation in case of success. If the original method returns no data on
          /// success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard
          /// `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have
          /// the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is
          /// `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("response")]
          public virtual System.Collections.Generic.IDictionary<string, object> Response { get; set; }
  
          /// <summary>The ETag of the item.</summary>
          public virtual string ETag { get; set; }
      }    
  
      /// <summary>The `Status` type defines a logical error model that is suitable for different programming
      /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status`
      /// message contains three pieces of data: error code, error message, and error details. You can find out more about
      /// this error model and how to work with it in the [API Design
      /// Guide](https://cloud.google.com/apis/design/errors).</summary>
      public class Status : Google.Apis.Requests.IDirectResponseSchema
      {
          /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("code")]
          public virtual System.Nullable<int> Code { get; set; }
  
          /// <summary>A list of messages that carry the error details. There is a common set of message types for APIs to
          /// use.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("details")]
          public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string, object>> Details { get; set; }
  
          /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
          /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
          [Newtonsoft.Json.JsonPropertyAttribute("message")]
          public virtual string Message { get; set; }
  
          /// <summary>The ETag of the item.</summary>
          public virtual string ETag { get; set; }
      }
  }
  