text:
// Copyright 2022 Google LLC
//
// 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
//
//     https://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.DataFusion.v1
{
    /// The DataFusion Service.
    public class DataFusionService : Google.Apis.Services.BaseClientService
    {
        /// The API version.
        public const string Version = "v1";

        /// The discovery version used to generate this service.
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed = Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// Constructs a new service.
        public DataFusionService() : this(new Google.Apis.Services.BaseClientService.Initializer())
        {
        }

        /// Constructs a new service.
        /// <param name="initializer">The service initializer.</param>
        public DataFusionService(Google.Apis.Services.BaseClientService.Initializer initializer) : base(initializer)
        {
            Projects = new ProjectsResource(this);
        }

        /// Gets the service supported features.
        public override System.Collections.Generic.IList<string> Features => new string[0];

        /// Gets the service name.
        public override string Name => "datafusion";

        /// Gets the service base URI.
        public override string BaseUri =>
        #if NETSTANDARD1_3 || NETSTANDARD2_0 || NET45
            BaseUriOverride ?? "https://datafusion.googleapis.com/";
        #else
            "https://datafusion.googleapis.com/";
        #endif

        /// Gets the service base path.
        public override string BasePath => "";

        #if !NET40
        /// Gets the batch base URI; <c>null</c> if unspecified.
        public override string BatchUri => "https://datafusion.googleapis.com/batch";

        /// Gets the batch base path; <c>null</c> if unspecified.
        public override string BatchPath => "batch";
        #endif

        /// Available OAuth 2.0 scopes for use with the Cloud Data Fusion API.
        public class Scope
        {
            ///
            /// See, edit, configure, and delete your Google Cloud data and see the email address for your Google
            /// Account.
            ///
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";
        }

        /// Available OAuth 2.0 scope constants for use with the Cloud Data Fusion API.
        public static class ScopeConstants
        {
            ///
            /// See, edit, configure, and delete your Google Cloud data and see the email address for your Google
            /// Account.
            ///
            public const string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";
        }

        /// Gets the Projects resource.
        public virtual ProjectsResource Projects { get; }
    }

    /// A base abstract class for DataFusion requests.
    public abstract class DataFusionBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        /// Constructs a new DataFusionBaseServiceRequest instance.
        protected DataFusionBaseServiceRequest(Google.Apis.Services.IClientService service) : base(service)
        {
        }

        /// V1 error format.
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// V1 error format.
        public enum XgafvEnum
        {
            /// v1 error format
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1 = 0,

            /// v2 error format
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2 = 1,
        }

        /// OAuth access token.
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// Data format for response.
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// Data format for response.
        public enum AltEnum
        {
            /// Responses with Content-Type of application/json
            [Google.Apis.Util.StringValueAttribute("json")]
            Json = 0,

            /// Media download with context-dependent Content-Type
            [Google.Apis.Util.StringValueAttribute("media")]
            Media = 1,

            /// Responses with Content-Type of application/x-protobuf
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto = 2,
        }

        /// JSONP
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// Selector specifying which fields to include in a partial response.
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        ///
        /// 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.
        ///
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// OAuth 2.0 token for the current user.
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// Returns response with indentations and line breaks.
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        ///
        /// 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.
        ///
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// Legacy upload protocol for media (e.g. "media", "multipart").
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// Upload protocol for media (e.g. "raw", "multipart").
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// Initializes DataFusion parameter list.
        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,
            });
        }
    }

    /// The "projects" collection of methods.
    public class ProjectsResource
    {
        private const string Resource = "projects";

        /// The service which this resource belongs to.
        private readonly Google.Apis.Services.IClientService service;

        /// Constructs a new resource.
        public ProjectsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            Locations = new LocationsResource(service);
        }

        /// Gets the Locations resource.
        public virtual LocationsResource Locations { get; }

        /// The "locations" collection of methods.
        public class LocationsResource
        {
            private const string Resource = "locations";

            /// The service which this resource belongs to.
            private readonly Google.Apis.Services.IClientService service;

            /// Constructs a new resource.
            public LocationsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                Instances = new InstancesResource(service);
                Operations = new OperationsResource(service);
                Versions = new VersionsResource(service);
            }

            /// Gets the Instances resource.
            public virtual InstancesResource Instances { get; }

            /// The "instances" collection of methods.
            public class InstancesResource
            {
                private const string Resource = "instances";

                /// The service which this resource belongs to.
                private readonly Google.Apis.Services.IClientService service;

                /// Constructs a new resource.
                public InstancesResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;
                    DnsPeerings = new DnsPeeringsResource(service);
                }

                /// Gets the DnsPeerings resource.
                public virtual DnsPeeringsResource DnsPeerings { get; }

                /// The "dnsPeerings" collection of methods.
                public class DnsPeeringsResource
                {
                    private const string Resource = "dnsPeerings";

                    /// The service which this resource belongs to.
                    private readonly Google.Apis.Services.IClientService service;

                    /// Constructs a new resource.
                    public DnsPeeringsResource(Google.Apis.Services.IClientService service)
                    {
                        this.service = service;
                    }

                    /// Creates DNS peering on the given resource.
                    /// <param name="body">The body of the request.</param>
                    /// <param name="parent">Required. The resource on which DNS peering will be created.</param>
                    public virtual CreateRequest Create(Google.Apis.DataFusion.v1.Data.DnsPeering body, string parent)
                    {
                        return new CreateRequest(service, body, parent);
                    }

                    /// Creates DNS peering on the given resource.
                    public class CreateRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.DnsPeering>
                    {
                        /// Constructs a new Create request.
                        public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.DnsPeering body, string parent) : base(service)
                        {
                            Parent = parent;
                            Body = body;
                            InitParameters();
                        }

                        /// Required. The resource on which DNS peering will be created.
                        [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Parent { get; private set; }

                        /// Required. The name of the peering to create.
                        [Google.Apis.Util.RequestParameterAttribute("dnsPeeringId", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual string DnsPeeringId { get; set; }

                        /// Gets or sets the body of this request.
                        Google.Apis.DataFusion.v1.Data.DnsPeering Body { get; set; }

                        /// Returns the body of the request.
                        protected override object GetBody() => Body;

                        /// Gets the method name.
                        public override string MethodName => "create";

                        /// Gets the HTTP method.
                        public override string HttpMethod => "POST";

                        /// Gets the REST path.
                        public override string RestPath => "v1/{+parent}/dnsPeerings";

                        /// Initializes Create parameter list.
                        protected override void InitParameters()
                        {
                            base.InitParameters();
                            RequestParameters.Add("parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                            });
                            RequestParameters.Add("dnsPeeringId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "dnsPeeringId",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        }
                    }

                    /// Deletes DNS peering on the given resource.
                    /// <param name="name">
                    /// Required. The name of the DNS peering zone to delete. Format:
                    /// projects/{project}/locations/{location}/instances/{instance}/dnsPeerings/{dns_peering}
                    /// </param>
                    public virtual DeleteRequest Delete(string name)
                    {
                        return new DeleteRequest(service, name);
                    }

                    /// Deletes DNS peering on the given resource.
                    public class DeleteRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Empty>
                    {
                        /// Constructs a new Delete request.
                        public DeleteRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                        {
                            Name = name;
                            InitParameters();
                        }

                        ///
                        /// Required. The name of the DNS peering zone to delete. Format:
                        /// projects/{project}/locations/{location}/instances/{instance}/dnsPeerings/{dns_peering}
                        ///
                        [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Name { get; private set; }

                        /// Gets the method name.
                        public override string MethodName => "delete";

                        /// Gets the HTTP method.
                        public override string HttpMethod => "DELETE";

                        /// Gets the REST path.
                        public override string RestPath => "v1/{+name}";

                        /// Initializes Delete parameter list.
                        protected override void InitParameters()
                        {
                            base.InitParameters();
                            RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+/dnsPeerings/[^/]+$",
                            });
                        }
                    }

                    /// Lists DNS peerings for a given resource.
                    /// <param name="parent">
                    /// Required. The parent, which owns this collection of dns peerings. Format:
                    /// projects/{project}/locations/{location}/instances/{instance}
                    /// </param>
                    public virtual ListRequest List(string parent)
                    {
                        return new ListRequest(service, parent);
                    }

                    /// Lists DNS peerings for a given resource.
                    public class ListRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.ListDnsPeeringsResponse>
                    {
                        /// Constructs a new List request.
                        public ListRequest(Google.Apis.Services.IClientService service, string parent) : base(service)
                        {
                            Parent = parent;
                            InitParameters();
                        }

                        ///
                        /// Required. The parent, which owns this collection of dns peerings. Format:
                        /// projects/{project}/locations/{location}/instances/{instance}
                        ///
                        [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Parent { get; private set; }

                        ///
                        /// The maximum number of dns peerings to return. The service may return fewer than this value.
                        /// If unspecified, at most 50 dns peerings will be returned. The maximum value is 200; values
                        /// above 200 will be coerced to 200.
                        ///
                        [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual System.Nullable<int> PageSize { get; set; }

                        ///
                        /// A page token, received from a previous `ListDnsPeerings` call. Provide this to retrieve the
                        /// subsequent page. When paginating, all other parameters provided to `ListDnsPeerings` must
                        /// match the call that provided the page token.
                        ///
                        [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual string PageToken { get; set; }

                        /// Gets the method name.
                        public override string MethodName => "list";

                        /// Gets the HTTP method.
                        public override string HttpMethod => "GET";

                        /// Gets the REST path.
                        public override string RestPath => "v1/{+parent}/dnsPeerings";

                        /// Initializes List parameter list.
                        protected override void InitParameters()
                        {
                            base.InitParameters();
                            RequestParameters.Add("parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                            });
                            RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                            RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        }
                    }
                }

                /// Creates a new Data Fusion instance in the specified project and location.
                /// <param name="body">The body of the request.</param>
                /// <param name="parent">
                /// Required. The instance's project and location in the format projects/{project}/locations/{location}.
                /// </param>
                public virtual CreateRequest Create(Google.Apis.DataFusion.v1.Data.Instance body, string parent)
                {
                    return new CreateRequest(service, body, parent);
                }

                /// Creates a new Data Fusion instance in the specified project and location.
                public class CreateRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Operation>
                {
                    /// Constructs a new Create request.
                    public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.Instance body, string parent) : base(service)
                    {
                        Parent = parent;
                        Body = body;
                        InitParameters();
                    }

                    ///
                    /// Required. The instance's project and location in the format
                    /// projects/{project}/locations/{location}.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// Required. The name of the instance to create.
                    [Google.Apis.Util.RequestParameterAttribute("instanceId", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string InstanceId { get; set; }

                    /// Gets or sets the body of this request.
                    Google.Apis.DataFusion.v1.Data.Instance Body { get; set; }

                    /// Returns the body of the request.
                    protected override object GetBody() => Body;

                    /// Gets the method name.
                    public override string MethodName => "create";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "POST";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+parent}/instances";

                    /// Initializes Create parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+$",
                        });
                        RequestParameters.Add("instanceId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "instanceId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    }
                }

                /// Deletes a single Date Fusion instance.
                /// <param name="name">
                /// Required. The instance resource name in the format
                /// projects/{project}/locations/{location}/instances/{instance}
                /// </param>
                public virtual DeleteRequest Delete(string name)
                {
                    return new DeleteRequest(service, name);
                }

                /// Deletes a single Date Fusion instance.
                public class DeleteRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Operation>
                {
                    /// Constructs a new Delete request.
                    public DeleteRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }

                    ///
                    /// Required. The instance resource name in the format
                    /// projects/{project}/locations/{location}/instances/{instance}
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// Gets the method name.
                    public override string MethodName => "delete";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "DELETE";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}";

                    /// Initializes Delete parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                    }
                }

                /// Gets details of a single Data Fusion instance.
                /// <param name="name">
                /// Required. The instance resource name in the format
                /// projects/{project}/locations/{location}/instances/{instance}.
                /// </param>
                public virtual GetRequest Get(string name)
                {
                    return new GetRequest(service, name);
                }

                /// Gets details of a single Data Fusion instance.
                public class GetRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Instance>
                {
                    /// Constructs a new Get request.
                    public GetRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }

                    ///
                    /// Required. The instance resource name in the format
                    /// projects/{project}/locations/{location}/instances/{instance}.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// Gets the method name.
                    public override string MethodName => "get";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "GET";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}";

                    /// Initializes Get parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                    }
                }

                ///
                /// Gets the access control policy for a resource. Returns an empty policy if the resource exists and
                /// does not have a policy set.
                ///
                /// <param name="resource">
                /// REQUIRED: The resource for which the policy is being requested. See [Resource
                /// names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
                /// field.
                /// </param>
                public virtual GetIamPolicyRequest GetIamPolicy(string resource)
                {
                    return new GetIamPolicyRequest(service, resource);
                }

                ///
                /// Gets the access control policy for a resource. Returns an empty policy if the resource exists and
                /// does not have a policy set.
                ///
                public class GetIamPolicyRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Policy>
                {
                    /// Constructs a new GetIamPolicy request.
                    public GetIamPolicyRequest(Google.Apis.Services.IClientService service, string resource) : base(service)
                    {
                        Resource = resource;
                        InitParameters();
                    }

                    ///
                    /// REQUIRED: The resource for which the policy is being requested. See [Resource
                    /// names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
                    /// field.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Resource { get; private set; }

                    ///
                    /// Optional. The maximum policy version that will be used to format the policy. Valid values are 0,
                    /// 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
                    /// conditional role bindings must specify version 3. Policies with no conditional role bindings may
                    /// specify any valid value or leave the field unset. The policy in the response might use the
                    /// policy version that you specified, or it might use a lower policy version. For example, if you
                    /// specify version 3, but the policy has no conditional role bindings, the response uses version 1.
                    /// To learn which resources support conditions in their IAM policies, see the [IAM
                    /// documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("options.requestedPolicyVersion", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> OptionsRequestedPolicyVersion { get; set; }

                    /// Gets the method name.
                    public override string MethodName => "getIamPolicy";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "GET";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+resource}:getIamPolicy";

                    /// Initializes GetIamPolicy parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("resource", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resource",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                        RequestParameters.Add("options.requestedPolicyVersion", new Google.Apis.Discovery.Parameter
                        {
                            Name = "options.requestedPolicyVersion",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    }
                }

                /// Lists Data Fusion instances in the specified project and location.
                /// <param name="parent">
                /// Required. The project and location for which to retrieve instance information in the format
                /// projects/{project}/locations/{location}. If the location is specified as '-' (wildcard), then all
                /// regions available to the project are queried, and the results are aggregated.
                /// </param>
                public virtual ListRequest List(string parent)
                {
                    return new ListRequest(service, parent);
                }

                /// Lists Data Fusion instances in the specified project and location.
                public class ListRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.ListInstancesResponse>
                {
                    /// Constructs a new List request.
                    public ListRequest(Google.Apis.Services.IClientService service, string parent) : base(service)
                    {
                        Parent = parent;
                        InitParameters();
                    }

                    ///
                    /// Required. The project and location for which to retrieve instance information in the format
                    /// projects/{project}/locations/{location}. If the location is specified as '-' (wildcard), then
                    /// all regions available to the project are queried, and the results are aggregated.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// List filter.
                    [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string Filter { get; set; }

                    /// Sort results. Supported values are "name", "name desc", or "" (unsorted).
                    [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string OrderBy { get; set; }

                    /// The maximum number of items to return.
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }

                    ///
                    /// The next_page_token value to use if there are additional results to retrieve for this list
                    /// request.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// Gets the method name.
                    public override string MethodName => "list";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "GET";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+parent}/instances";

                    /// Initializes List parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+$",
                        });
                        RequestParameters.Add("filter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "filter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("orderBy", new Google.Apis.Discovery.Parameter
                        {
                            Name = "orderBy",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    }
                }

                /// Updates a single Data Fusion instance.
                /// <param name="body">The body of the request.</param>
                /// <param name="name">
                /// Output only. The name of this instance is in the form of
                /// projects/{project}/locations/{location}/instances/{instance}.
                /// </param>
                public virtual PatchRequest Patch(Google.Apis.DataFusion.v1.Data.Instance body, string name)
                {
                    return new PatchRequest(service, body, name);
                }

                /// Updates a single Data Fusion instance.
                public class PatchRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Operation>
                {
                    /// Constructs a new Patch request.
                    public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.Instance body, string name) : base(service)
                    {
                        Name = name;
                        Body = body;
                        InitParameters();
                    }

                    ///
                    /// Output only. The name of this instance is in the form of
                    /// projects/{project}/locations/{location}/instances/{instance}.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    ///
                    /// Field mask is used to specify the fields that the update will overwrite in an instance resource.
                    /// The fields specified in the update_mask are relative to the resource, not the full request. A
                    /// field will be overwritten if it is in the mask. If the user does not provide a mask, the label
                    /// field will be overwritten.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual object UpdateMask { get; set; }

                    /// Gets or sets the body of this request.
                    Google.Apis.DataFusion.v1.Data.Instance Body { get; set; }

                    /// Returns the body of the request.
                    protected override object GetBody() => Body;

                    /// Gets the method name.
                    public override string MethodName => "patch";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "PATCH";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}";

                    /// Initializes Patch parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                        RequestParameters.Add("updateMask", new Google.Apis.Discovery.Parameter
                        {
                            Name = "updateMask",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    }
                }

                ///
                /// Restart a single Data Fusion instance. At the end of an operation instance is fully restarted.
                ///
                /// <param name="body">The body of the request.</param>
                /// <param name="name">
                /// Required. Name of the Data Fusion instance which need to be restarted in the form of
                /// projects/{project}/locations/{location}/instances/{instance}
                /// </param>
                public virtual RestartRequest Restart(Google.Apis.DataFusion.v1.Data.RestartInstanceRequest body, string name)
                {
                    return new RestartRequest(service, body, name);
                }

                ///
                /// Restart a single Data Fusion instance. At the end of an operation instance is fully restarted.
                ///
                public class RestartRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Operation>
                {
                    /// Constructs a new Restart request.
                    public RestartRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.RestartInstanceRequest body, string name) : base(service)
                    {
                        Name = name;
                        Body = body;
                        InitParameters();
                    }

                    ///
                    /// Required. Name of the Data Fusion instance which need to be restarted in the form of
                    /// projects/{project}/locations/{location}/instances/{instance}
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// Gets or sets the body of this request.
                    Google.Apis.DataFusion.v1.Data.RestartInstanceRequest Body { get; set; }

                    /// Returns the body of the request.
                    protected override object GetBody() => Body;

                    /// Gets the method name.
                    public override string MethodName => "restart";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "POST";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}:restart";

                    /// Initializes Restart parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                    }
                }

                ///
                /// Sets the access control policy on the specified resource. Replaces any existing policy. Can return
                /// `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
                ///
                /// <param name="body">The body of the request.</param>
                /// <param name="resource">
                /// REQUIRED: The resource for which the policy is being specified. See [Resource
                /// names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
                /// field.
                /// </param>
                public virtual SetIamPolicyRequest SetIamPolicy(Google.Apis.DataFusion.v1.Data.SetIamPolicyRequest body, string resource)
                {
                    return new SetIamPolicyRequest(service, body, resource);
                }

                ///
                /// Sets the access control policy on the specified resource. Replaces any existing policy. Can return
                /// `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
                ///
                public class SetIamPolicyRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Policy>
                {
                    /// Constructs a new SetIamPolicy request.
                    public SetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.SetIamPolicyRequest body, string resource) : base(service)
                    {
                        Resource = resource;
                        Body = body;
                        InitParameters();
                    }

                    ///
                    /// REQUIRED: The resource for which the policy is being specified. See [Resource
                    /// names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
                    /// field.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Resource { get; private set; }

                    /// Gets or sets the body of this request.
                    Google.Apis.DataFusion.v1.Data.SetIamPolicyRequest Body { get; set; }

                    /// Returns the body of the request.
                    protected override object GetBody() => Body;

                    /// Gets the method name.
                    public override string MethodName => "setIamPolicy";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "POST";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+resource}:setIamPolicy";

                    /// Initializes SetIamPolicy parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("resource", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resource",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                    }
                }

                ///
                /// Returns permissions that a caller has on the specified resource. If the resource does not exist,
                /// this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
                /// designed to be used for building permission-aware UIs and command-line tools, not for authorization
                /// checking. This operation may "fail open" without warning.
                ///
                /// <param name="body">The body of the request.</param>
                /// <param name="resource">
                /// REQUIRED: The resource for which the policy detail is being requested. See [Resource
                /// names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
                /// field.
                /// </param>
                public virtual TestIamPermissionsRequest TestIamPermissions(Google.Apis.DataFusion.v1.Data.TestIamPermissionsRequest body, string resource)
                {
                    return new TestIamPermissionsRequest(service, body, resource);
                }

                ///
                /// Returns permissions that a caller has on the specified resource. If the resource does not exist,
                /// this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
                /// designed to be used for building permission-aware UIs and command-line tools, not for authorization
                /// checking. This operation may "fail open" without warning.
                ///
                public class TestIamPermissionsRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.TestIamPermissionsResponse>
                {
                    /// Constructs a new TestIamPermissions request.
                    public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.TestIamPermissionsRequest body, string resource) : base(service)
                    {
                        Resource = resource;
                        Body = body;
                        InitParameters();
                    }

                    ///
                    /// REQUIRED: The resource for which the policy detail is being requested. See [Resource
                    /// names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
                    /// field.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Resource { get; private set; }

                    /// Gets or sets the body of this request.
                    Google.Apis.DataFusion.v1.Data.TestIamPermissionsRequest Body { get; set; }

                    /// Returns the body of the request.
                    protected override object GetBody() => Body;

                    /// Gets the method name.
                    public override string MethodName => "testIamPermissions";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "POST";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+resource}:testIamPermissions";

                    /// Initializes TestIamPermissions parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("resource", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resource",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
                        });
                    }
                }
            }

            /// Gets the Operations resource.
            public virtual OperationsResource Operations { get; }

            /// The "operations" collection of methods.
            public class OperationsResource
            {
                private const string Resource = "operations";

                /// The service which this resource belongs to.
                private readonly Google.Apis.Services.IClientService service;

                /// Constructs a new resource.
                public OperationsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;
                }

                ///
                /// Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
                /// cancel the operation, but success is not guaranteed. If the server doesn't support this method, it
                /// returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to
                /// check whether the cancellation succeeded or whether the operation completed despite cancellation. On
                /// successful cancellation, the operation is not deleted; instead, it becomes an operation with an
                /// Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
                ///
                /// <param name="body">The body of the request.</param>
                /// <param name="name">The name of the operation resource to be cancelled.</param>
                public virtual CancelRequest Cancel(Google.Apis.DataFusion.v1.Data.CancelOperationRequest body, string name)
                {
                    return new CancelRequest(service, body, name);
                }

                ///
                /// Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
                /// cancel the operation, but success is not guaranteed. If the server doesn't support this method, it
                /// returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to
                /// check whether the cancellation succeeded or whether the operation completed despite cancellation. On
                /// successful cancellation, the operation is not deleted; instead, it becomes an operation with an
                /// Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
                ///
                public class CancelRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Empty>
                {
                    /// Constructs a new Cancel request.
                    public CancelRequest(Google.Apis.Services.IClientService service, Google.Apis.DataFusion.v1.Data.CancelOperationRequest body, string name) : base(service)
                    {
                        Name = name;
                        Body = body;
                        InitParameters();
                    }

                    /// The name of the operation resource to be cancelled.
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// Gets or sets the body of this request.
                    Google.Apis.DataFusion.v1.Data.CancelOperationRequest Body { get; set; }

                    /// Returns the body of the request.
                    protected override object GetBody() => Body;

                    /// Gets the method name.
                    public override string MethodName => "cancel";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "POST";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}:cancel";

                    /// Initializes Cancel parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                        });
                    }
                }

                ///
                /// Deletes a long-running operation. This method indicates that the client is no longer interested in
                /// the operation result. It does not cancel the operation. If the server doesn't support this method,
                /// it returns `google.rpc.Code.UNIMPLEMENTED`.
                ///
                /// <param name="name">The name of the operation resource to be deleted.</param>
                public virtual DeleteRequest Delete(string name)
                {
                    return new DeleteRequest(service, name);
                }

                ///
                /// Deletes a long-running operation. This method indicates that the client is no longer interested in
                /// the operation result. It does not cancel the operation. If the server doesn't support this method,
                /// it returns `google.rpc.Code.UNIMPLEMENTED`.
                ///
                public class DeleteRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Empty>
                {
                    /// Constructs a new Delete request.
                    public DeleteRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }

                    /// The name of the operation resource to be deleted.
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// Gets the method name.
                    public override string MethodName => "delete";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "DELETE";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}";

                    /// Initializes Delete parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                        });
                    }
                }

                ///
                /// Gets the latest state of a long-running operation. Clients can use this method to poll the operation
                /// result at intervals as recommended by the API service.
                ///
                /// <param name="name">The name of the operation resource.</param>
                public virtual GetRequest Get(string name)
                {
                    return new GetRequest(service, name);
                }

                ///
                /// Gets the latest state of a long-running operation. Clients can use this method to poll the operation
                /// result at intervals as recommended by the API service.
                ///
                public class GetRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Operation>
                {
                    /// Constructs a new Get request.
                    public GetRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }

                    /// The name of the operation resource.
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// Gets the method name.
                    public override string MethodName => "get";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "GET";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}";

                    /// Initializes Get parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                        });
                    }
                }

                ///
                /// Lists operations that match the specified filter in the request. If the server doesn't support this
                /// method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the
                /// binding to use different resource name schemes, such as `users/*/operations`. To override the
                /// binding, API services can add a binding such as `"/v1/{name=users/*}/operations"` to their service
                /// configuration. For backwards compatibility, the default name includes the operations collection id,
                /// however overriding users must ensure the name binding is the parent resource, without the operations
                /// collection id.
                ///
                /// <param name="name">The name of the operation's parent resource.</param>
                public virtual ListRequest List(string name)
                {
                    return new ListRequest(service, name);
                }

                ///
                /// Lists operations that match the specified filter in the request. If the server doesn't support this
                /// method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the
                /// binding to use different resource name schemes, such as `users/*/operations`. To override the
                /// binding, API services can add a binding such as `"/v1/{name=users/*}/operations"` to their service
                /// configuration. For backwards compatibility, the default name includes the operations collection id,
                /// however overriding users must ensure the name binding is the parent resource, without the operations
                /// collection id.
                ///
                public class ListRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.ListOperationsResponse>
                {
                    /// Constructs a new List request.
                    public ListRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }

                    /// The name of the operation's parent resource.
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// The standard list filter.
                    [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string Filter { get; set; }

                    /// The standard list page size.
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }

                    /// The standard list page token.
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// Gets the method name.
                    public override string MethodName => "list";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "GET";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+name}/operations";

                    /// Initializes List parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+$",
                        });
                        RequestParameters.Add("filter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "filter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    }
                }
            }

            /// Gets the Versions resource.
            public virtual VersionsResource Versions { get; }

            /// The "versions" collection of methods.
            public class VersionsResource
            {
                private const string Resource = "versions";

                /// The service which this resource belongs to.
                private readonly Google.Apis.Services.IClientService service;

                /// Constructs a new resource.
                public VersionsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;
                }

                ///
                /// Lists possible versions for Data Fusion instances in the specified project and location.
                ///
                /// <param name="parent">
                /// Required. The project and location for which to retrieve instance information in the format
                /// projects/{project}/locations/{location}.
                /// </param>
                public virtual ListRequest List(string parent)
                {
                    return new ListRequest(service, parent);
                }

                ///
                /// Lists possible versions for Data Fusion instances in the specified project and location.
                ///
                public class ListRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.ListAvailableVersionsResponse>
                {
                    /// Constructs a new List request.
                    public ListRequest(Google.Apis.Services.IClientService service, string parent) : base(service)
                    {
                        Parent = parent;
                        InitParameters();
                    }

                    ///
                    /// Required. The project and location for which to retrieve instance information in the format
                    /// projects/{project}/locations/{location}.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    ///
                    /// Whether or not to return the latest patch of every available minor version. If true, only the
                    /// latest patch will be returned. Ex. if allowed versions is [6.1.1, 6.1.2, 6.2.0] then response
                    /// will be [6.1.2, 6.2.0]
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("latestPatchOnly", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<bool> LatestPatchOnly { get; set; }

                    /// The maximum number of items to return.
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }

                    ///
                    /// The next_page_token value to use if there are additional results to retrieve for this list
                    /// request.
                    ///
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// Gets the method name.
                    public override string MethodName => "list";

                    /// Gets the HTTP method.
                    public override string HttpMethod => "GET";

                    /// Gets the REST path.
                    public override string RestPath => "v1/{+parent}/versions";

                    /// Initializes List parameter list.
                    protected override void InitParameters()
                    {
                        base.InitParameters();
                        RequestParameters.Add("parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/locations/[^/]+$",
                        });
                        RequestParameters.Add("latestPatchOnly", new Google.Apis.Discovery.Parameter
                        {
                            Name = "latestPatchOnly",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                        RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    }
                }
            }

            /// Gets information about a location.
            /// <param name="name">Resource name for the location.</param>
            public virtual GetRequest Get(string name)
            {
                return new GetRequest(service, name);
            }

            /// Gets information about a location.
            public class GetRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.Location>
            {
                /// Constructs a new Get request.
                public GetRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                {
                    Name = name;
                    InitParameters();
                }

                /// Resource name for the location.
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }

                /// Gets the method name.
                public override string MethodName => "get";

                /// Gets the HTTP method.
                public override string HttpMethod => "GET";

                /// Gets the REST path.
                public override string RestPath => "v1/{+name}";

                /// Initializes Get parameter list.
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^projects/[^/]+/locations/[^/]+$",
                    });
                }
            }

            /// Lists information about the supported locations for this service.
            /// <param name="name">The resource that owns the locations collection, if applicable.</param>
            public virtual ListRequest List(string name)
            {
                return new ListRequest(service, name);
            }

            /// Lists information about the supported locations for this service.
            public class ListRequest : DataFusionBaseServiceRequest<Google.Apis.DataFusion.v1.Data.ListLocationsResponse>
            {
                /// Constructs a new List request.
                public ListRequest(Google.Apis.Services.IClientService service, string name) : base(service)
                {
                    Name = name;
                    InitParameters();
                }

                /// The resource that owns the locations collection, if applicable.
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }

                ///
                /// A filter to narrow down results to a preferred subset. The filtering language accepts strings like
                /// `"displayName=tokyo"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).
                ///
                [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Filter { get; set; }

                /// If true, the returned list will include locations which are not yet revealed.
                [Google.Apis.Util.RequestParameterAttribute("includeUnrevealedLocations", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<bool> IncludeUnrevealedLocations { get; set; }

                ///
                /// The maximum number of results to return. If not set, the service selects a default.
                ///
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                ///
                /// A page token received from the `next_page_token` field in the response. Send that page token to
                /// receive the subsequent page.
                ///
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// Gets the method name.
                public override string MethodName => "list";

                /// Gets the HTTP method.
                public override string HttpMethod => "GET";

                /// Gets the REST path.
                public override string RestPath => "v1/{+name}/locations";

                /// Initializes List parameter list.
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^projects/[^/]+$",
                    });
                    RequestParameters.Add("filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("includeUnrevealedLocations", new Google.Apis.Discovery.Parameter
                    {
                        Name = "includeUnrevealedLocations",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }
        }
    }
}
namespace Google.Apis.DataFusion.v1.Data
{
    /// Identifies Data Fusion accelerators for an instance.
    public class Accelerator : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The type of an accelator for a CDF instance.
        [Newtonsoft.Json.JsonPropertyAttribute("acceleratorType")]
        public virtual string AcceleratorType { get; set; }

        /// The state of the accelerator
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// Specifies the audit configuration for a service. The configuration determines which permission types are logged,
    /// and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If
    /// there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used
    /// for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each
    /// AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { "audit_configs": [ { "service":
    /// "allServices", "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:jose@example.com" ]
    /// }, { "log_type": "DATA_WRITE" }, { "log_type": "ADMIN_READ" } ] }, { "service": "sampleservice.googleapis.com",
    /// "audit_log_configs": [ { "log_type": "DATA_READ" }, { "log_type": "DATA_WRITE", "exempted_members": [
    /// "user:aliya@example.com" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
    /// logging. It also exempts `jose@example.com` from DATA_READ logging, and `aliya@example.com` from DATA_WRITE
    /// logging.
    ///
    public class AuditConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The configuration for logging of each type of permission.
        [Newtonsoft.Json.JsonPropertyAttribute("auditLogConfigs")]
        public virtual System.Collections.Generic.IList<AuditLogConfig> AuditLogConfigs { get; set; }

        ///
        /// Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`,
        /// `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("service")]
        public virtual string Service { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// Provides the configuration for logging a type of permissions. Example: { "audit_log_configs": [ { "log_type":
    /// "DATA_READ", "exempted_members": [ "user:jose@example.com" ] }, { "log_type": "DATA_WRITE" } ] } This enables
    /// 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.
    ///
    public class AuditLogConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// Specifies the identities that do not cause logging for this type of permission. Follows the same format of
        /// Binding.members.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("exemptedMembers")]
        public virtual System.Collections.Generic.IList<string> ExemptedMembers { get; set; }

        /// The log type that this config enables.
        [Newtonsoft.Json.JsonPropertyAttribute("logType")]
        public virtual string LogType { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Associates `members`, or principals, with a `role`.
    public class Binding : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// The condition that is associated with this binding. If the condition evaluates to `true`, then this binding
        /// applies to the current request. If the condition evaluates to `false`, then this binding does not apply to
        /// the current request. However, a different role binding might grant the same role to one or more of the
        /// principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM
        /// documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("condition")]
        public virtual Expr Condition { get; set; }

        ///
        /// Specifies the principals requesting access for a Google Cloud resource. `members` can have the following
        /// values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a
        /// Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated
        /// with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific
        /// Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that
        /// represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`:
        /// An email address that represents a Google group. For example, `admins@example.com`. *
        /// `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that
        /// has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is
        /// recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. *
        /// `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a
        /// service account that has been recently deleted. For example,
        /// `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted,
        /// this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the
        /// binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing
        /// a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`.
        /// If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role
        /// in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that
        /// domain. For example, `google.com` or `example.com`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; }

        ///
        /// Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`,
        /// or `roles/owner`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("role")]
        public virtual string Role { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// The request message for Operations.CancelOperation.
    public class CancelOperationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// The crypto key configuration. This field is used by the Customer-managed encryption keys (CMEK) feature.
    ///
    public class CryptoKeyConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// The name of the key which is used to encrypt/decrypt customer data. For key in Cloud KMS, the key should be
        /// in the format of `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("keyReference")]
        public virtual string KeyReference { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// DNS peering configuration. These configurations are used to create DNS peering with the customer Cloud DNS.
    ///
    public class DnsPeering : Google.Apis.Requests.IDirectResponseSchema
    {
        /// Optional. Optional description of the dns zone.
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// Required. The dns name suffix of the zone.
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual string Domain { get; set; }

        ///
        /// Required. The resource name of the dns peering zone. Format:
        /// projects/{project}/locations/{location}/instances/{instance}/dnsPeerings/{dns_peering}
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// Optional. Optional target network to which dns peering should happen.
        [Newtonsoft.Json.JsonPropertyAttribute("targetNetwork")]
        public virtual string TargetNetwork { get; set; }

        /// Optional. Optional target project to which dns peering should happen.
        [Newtonsoft.Json.JsonPropertyAttribute("targetProject")]
        public virtual string TargetProject { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical
    /// example is to use it as the request or the response type of an API method. For instance: service Foo { rpc
    /// Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
    ///
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Confirguration of PubSubEventWriter.
    public class EventPublishConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// Required. Option to enable Event Publishing.
        [Newtonsoft.Json.JsonPropertyAttribute("eventPublishEnabled")]
        public virtual System.Nullable<bool> EventPublishEnabled { get; set; }

        /// Project name.
        [Newtonsoft.Json.JsonPropertyAttribute("project")]
        public virtual string Project { get; set; }

        /// Required. Pub/Sub Topic.
        [Newtonsoft.Json.JsonPropertyAttribute("topic")]
        public virtual string Topic { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression
    /// language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example
    /// (Comparison): title: "Summary size limit" description: "Determines if a summary is less than 100 chars"
    /// expression: "document.summary.size() &lt; 100" Example (Equality): title: "Requestor is owner" description:
    /// "Determines if requestor is the document owner" expression: "document.owner == request.auth.claims.email"
    /// Example (Logic): title: "Public documents" description: "Determine whether the document should be publicly
    /// visible" expression: "document.type != 'private' &amp;&amp; document.type != 'internal'" Example (Data
    /// Manipulation): title: "Notification string" description: "Create a notification string with a timestamp."
    /// expression: "'New message received at ' + string(document.create_time)" The exact variables and functions that
    /// may be referenced within an expression are determined by the service that evaluates it. See the service
    /// documentation for additional information.
    ///
    public class Expr : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// Optional. Description of the expression. This is a longer text which describes the expression, e.g. when
        /// hovered over it in a UI.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// Textual representation of an expression in Common Expression Language syntax.
        [Newtonsoft.Json.JsonPropertyAttribute("expression")]
        public virtual string Expression { get; set; }

        ///
        /// Optional. String indicating the location of the expression for error reporting, e.g. a file name and a
        /// position in the file.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; }

        ///
        /// Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs
        /// which allow to enter the expression.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Represents a Data Fusion instance.
    public class Instance : Google.Apis.Requests.IDirectResponseSchema
    {
        /// List of accelerators enabled for this CDF instance.
        [Newtonsoft.Json.JsonPropertyAttribute("accelerators")]
        public virtual System.Collections.Generic.IList<Accelerator> Accelerators { get; set; }

        /// Output only. Endpoint on which the REST APIs is accessible.
        [Newtonsoft.Json.JsonPropertyAttribute("apiEndpoint")]
        public virtual string ApiEndpoint { get; set; }

        /// Available versions that the instance can be upgraded to using UpdateInstanceRequest.
        [Newtonsoft.Json.JsonPropertyAttribute("availableVersion")]
        public virtual System.Collections.Generic.IList<Version> AvailableVersion { get; set; }

        /// Output only. The time the instance was created.
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; }

        ///
        /// The crypto key configuration. This field is used by the Customer-Managed Encryption Keys (CMEK) feature.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("cryptoKeyConfig")]
        public virtual CryptoKeyConfig CryptoKeyConfig { get; set; }

        ///
        /// User-managed service account to set on Dataproc when Cloud Data Fusion creates Dataproc to run data
        /// processing pipelines. This allows users to have fine-grained access control on Dataproc's accesses to cloud
        /// resources.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("dataprocServiceAccount")]
        public virtual string DataprocServiceAccount { get; set; }

        /// A description of this instance.
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// Output only. If the instance state is DISABLED, the reason for disabling the instance.
        [Newtonsoft.Json.JsonPropertyAttribute("disabledReason")]
        public virtual System.Collections.Generic.IList<string> DisabledReason { get; set; }

        /// Display name for an instance.
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; }

        /// Option to enable granular role-based access control.
        [Newtonsoft.Json.JsonPropertyAttribute("enableRbac")]
        public virtual System.Nullable<bool> EnableRbac { get; set; }

        /// Option to enable Stackdriver Logging.
        [Newtonsoft.Json.JsonPropertyAttribute("enableStackdriverLogging")]
        public virtual System.Nullable<bool> EnableStackdriverLogging { get; set; }

        /// Option to enable Stackdriver Monitoring.
        [Newtonsoft.Json.JsonPropertyAttribute("enableStackdriverMonitoring")]
        public virtual System.Nullable<bool> EnableStackdriverMonitoring { get; set; }

        /// Option to enable and pass metadata for event publishing.
        [Newtonsoft.Json.JsonPropertyAttribute("eventPublishConfig")]
        public virtual EventPublishConfig EventPublishConfig { get; set; }

        /// Output only. Cloud Storage bucket generated by Data Fusion in the customer project.
        [Newtonsoft.Json.JsonPropertyAttribute("gcsBucket")]
        public virtual string GcsBucket { get; set; }

        ///
        /// The resource labels for instance to use to annotate any related underlying resources such as Compute Engine
        /// VMs. The character '=' is not allowed to be used within the labels.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IDictionary<string, string> Labels { get; set; }

        ///
        /// Output only. The name of this instance is in the form of
        /// projects/{project}/locations/{location}/instances/{instance}.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        ///
        /// Network configuration options. These are required when a private Data Fusion instance is to be created.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("networkConfig")]
        public virtual NetworkConfig NetworkConfig { get; set; }

        /// Map of additional options used to configure the behavior of Data Fusion instance.
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IDictionary<string, string> Options { get; set; }

        /// Output only. P4 service account for the customer project.
        [Newtonsoft.Json.JsonPropertyAttribute("p4ServiceAccount")]
        public virtual string P4ServiceAccount { get; set; }

        ///
        /// Specifies whether the Data Fusion instance should be private. If set to true, all Data Fusion nodes will
        /// have private IP addresses and will not be able to access the public internet.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("privateInstance")]
        public virtual System.Nullable<bool> PrivateInstance { get; set; }

        /// Output only. Deprecated. Use tenant_project_id instead to extract the tenant project ID.
        [Newtonsoft.Json.JsonPropertyAttribute("serviceAccount")]
        public virtual string ServiceAccount { get; set; }

        /// Output only. Endpoint on which the Data Fusion UI is accessible.
        [Newtonsoft.Json.JsonPropertyAttribute("serviceEndpoint")]
        public virtual string ServiceEndpoint { get; set; }

        /// Output only. The current state of this Data Fusion instance.
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; }

        ///
        /// Output only. Additional information about the current state of this Data Fusion instance if available.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("stateMessage")]
        public virtual string StateMessage { get; set; }

        /// Output only. The name of the tenant project.
        [Newtonsoft.Json.JsonPropertyAttribute("tenantProjectId")]
        public virtual string TenantProjectId { get; set; }

        /// Required. Instance type.
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// Output only. The time the instance was last updated.
        [Newtonsoft.Json.JsonPropertyAttribute("updateTime")]
        public virtual object UpdateTime { get; set; }

        /// Current version of the Data Fusion. Only specifiable in Update.
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; }

        ///
        /// Name of the zone in which the Data Fusion instance will be created. Only DEVELOPER instances use this field.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Response message for the list available versions request.
    public class ListAvailableVersionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// Represents a list of versions that are supported.
        [Newtonsoft.Json.JsonPropertyAttribute("availableVersions")]
        public virtual System.Collections.Generic.IList<Version> AvailableVersions { get; set; }

        ///
        /// Token to retrieve the next page of results or empty if there are no more results in the list.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Response message for list DNS peerings.
    public class ListDnsPeeringsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// List of dns peering.
        [Newtonsoft.Json.JsonPropertyAttribute("dnsPeerings")]
        public virtual System.Collections.Generic.IList<DnsPeering> DnsPeerings { get; set; }

        ///
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Response message for the list instance request.
    public class ListInstancesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// Represents a list of Data Fusion instances.
        [Newtonsoft.Json.JsonPropertyAttribute("instances")]
        public virtual System.Collections.Generic.IList<Instance> Instances { get; set; }

        ///
        /// Token to retrieve the next page of results or empty if there are no more results in the list.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// Locations that could not be reached.
        [Newtonsoft.Json.JsonPropertyAttribute("unreachable")]
        public virtual System.Collections.Generic.IList<string> Unreachable { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// The response message for Locations.ListLocations.
    public class ListLocationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// A list of locations that matches the specified filter in the request.
        [Newtonsoft.Json.JsonPropertyAttribute("locations")]
        public virtual System.Collections.Generic.IList<Location> Locations { get; set; }

        /// The standard List next-page token.
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// The response message for Operations.ListOperations.
    public class ListOperationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The standard List next-page token.
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// A list of operations that matches the specified filter in the request.
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// A resource that represents Google Cloud Platform location.
    public class Location : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The friendly name for this location, typically a nearby city name. For example, "Tokyo".
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; }

        ///
        /// Cross-service attributes for the location. For example {"cloud.googleapis.com/region": "us-east1"}
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IDictionary<string, string> Labels { get; set; }

        /// The canonical id for this location. For example: `"us-east1"`.
        [Newtonsoft.Json.JsonPropertyAttribute("locationId")]
        public virtual string LocationId { get; set; }

        /// Service-specific metadata. For example the available capacity at the given location.
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string, object> Metadata { get; set; }

        ///
        /// Resource name for the location, which may vary between implementations. For example:
        /// `"projects/example-project/locations/us-east1"`
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// Network configuration for a Data Fusion instance. These configurations are used for peering with the customer
    /// network. Configurations are optional when a public Data Fusion instance is to be created. However, providing
    /// these configurations allows several benefits, such as reduced network latency while accessing the customer
    /// resources from managed Data Fusion instance nodes, as well as access to the customer on-prem resources.
    ///
    public class NetworkConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// The IP range in CIDR notation to use for the managed Data Fusion instance nodes. This range must not overlap
        /// with any other ranges used in the customer network.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("ipAllocation")]
        public virtual string IpAllocation { get; set; }

        ///
        /// Name of the network in the customer project with which the Tenant Project will be peered for executing
        /// pipelines. In case of shared VPC where the network resides in another host project the network should
        /// specified in the form of projects/{host-project-id}/global/networks/{network}
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("network")]
        public virtual string Network { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// This resource represents a long-running operation that is the result of a network API call.
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// 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.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; }

        /// The error result of the operation in case of failure or cancellation.
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Status Error { get; set; }

        ///
        /// 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.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string, object> Metadata { get; set; }

        ///
        /// 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}`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        ///
        /// 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`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string, object> Response { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Represents the metadata of a long-running operation.
    public class OperationMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// Map to hold any additional status info for the operation If there is an accelerator being
        /// enabled/disabled/deleted, this will be populated with accelerator name as key and status as ENABLING,
        /// DISABLING or DELETING
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("additionalStatus")]
        public virtual System.Collections.Generic.IDictionary<string, string> AdditionalStatus { get; set; }

        /// API version used to start the operation.
        [Newtonsoft.Json.JsonPropertyAttribute("apiVersion")]
        public virtual string ApiVersion { get; set; }

        /// The time the operation was created.
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; }

        /// The time the operation finished running.
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual object EndTime { get; set; }

        ///
        /// Identifies whether the user has requested cancellation of the operation. Operations that have successfully
        /// been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to
        /// `Code.CANCELLED`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("requestedCancellation")]
        public virtual System.Nullable<bool> RequestedCancellation { get; set; }

        /// Human-readable status of the operation if any.
        [Newtonsoft.Json.JsonPropertyAttribute("statusDetail")]
        public virtual string StatusDetail { get; set; }

        /// Server-defined resource path for the target of the operation.
        [Newtonsoft.Json.JsonPropertyAttribute("target")]
        public virtual string Target { get; set; }

        /// Name of the verb executed by the operation.
        [Newtonsoft.Json.JsonPropertyAttribute("verb")]
        public virtual string Verb { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A
    /// `Policy` is a collection of `bindings`. A `binding` binds one or more `members`, or principals, to a single
    /// `role`. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A
    /// `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role.
    /// For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical
    /// expression that allows access to a resource only if the expression evaluates to `true`. A condition can add
    /// constraints based on attributes of the request, the resource, or both. To learn which resources support
    /// conditions in their IAM policies, see the [IAM
    /// documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { "bindings":
    /// [ { "role": "roles/resourcemanager.organizationAdmin", "members": [ "user:mike@example.com",
    /// "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] },
    /// { "role": "roles/resourcemanager.organizationViewer", "members": [ "user:eve@example.com" ], "condition": {
    /// "title": "expirable access", "description": "Does not grant access after Sep 2020", "expression": "request.time
    /// &lt; timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": "BwWWja0YfJA=", "version": 3 } **YAML example:**
    /// bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com -
    /// serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin -
    /// members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable
    /// access description: Does not grant access after Sep 2020 expression: request.time &lt;
    /// timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= version: 3 For a description of IAM and its features,
    /// see the [IAM documentation](https://cloud.google.com/iam/docs/).
    ///
    public class Policy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// Specifies cloud audit logging configuration for this policy.
        [Newtonsoft.Json.JsonPropertyAttribute("auditConfigs")]
        public virtual System.Collections.Generic.IList<AuditConfig> AuditConfigs { get; set; }

        ///
        /// Associates a list of `members`, or principals, with a `role`. Optionally, may specify a `condition` that
        /// determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one
        /// principal. The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250 of these principals
        /// can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the
        /// `bindings` grant 50 different roles to `user:alice@example.com`, and not to any other principal, then you
        /// can add another 1,450 principals to the `bindings` in the `Policy`.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("bindings")]
        public virtual System.Collections.Generic.IList<Binding> Bindings { get; set; }

        ///
        /// `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy
        /// from overwriting each other. It is strongly suggested that systems make use of the `etag` in the
        /// read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned
        /// in the response to `getIamPolicy`, and systems are expected to put that etag in the request to
        /// `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:**
        /// If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit
        /// this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the
        /// conditions in the version `3` policy are lost.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; }

        ///
        /// Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid
        /// value are rejected. Any operation that affects conditional role bindings must specify version `3`. This
        /// requirement applies to the following operations: * Getting a policy that includes a conditional role binding
        /// * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing
        /// any role binding, with or without a condition, from a policy that includes conditions **Important:** If you
        /// use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this
        /// field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the
        /// conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on
        /// that policy may specify any valid version or leave the field unset. To learn which resources support
        /// conditions in their IAM policies, see the [IAM
        /// documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Nullable<int> Version { get; set; }
    }

    /// Request message for restarting a Data Fusion instance.
    public class RestartInstanceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Request message for `SetIamPolicy` method.
    public class SetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few
        /// 10s of KB. An empty policy is a valid policy but certain Google Cloud services (such as Projects) might
        /// reject them.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("policy")]
        public virtual Policy Policy { get; set; }

        ///
        /// OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be
        /// modified. If no mask is provided, the following default mask is used: `paths: "bindings, etag"`
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("updateMask")]
        public virtual object UpdateMask { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// 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).
    ///
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// The status code, which should be an enum value of google.rpc.Code.
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; }

        ///
        /// A list of messages that carry the error details. There is a common set of message types for APIs to use.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string, object>> Details { get; set; }

        ///
        /// 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.
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Request message for `TestIamPermissions` method.
    public class TestIamPermissionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        ///
        /// The set of permissions to check for the `resource`. Permissions with wildcards (such as `*` or `storage.*`)
        /// are not allowed. For more information see [IAM
        /// Overview](https://cloud.google.com/iam/docs/overview#permissions).
        ///
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    /// Response message for `TestIamPermissions` method.
    public class TestIamPermissionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }

    ///
    /// The Data Fusion version. This proto message stores information about certain Data Fusion version, which is used
    /// for Data Fusion version upgrade.
    ///
    public class Version : Google.Apis.Requests.IDirectResponseSchema
    {
        /// Represents a list of available feature names for a given version.
        [Newtonsoft.Json.JsonPropertyAttribute("availableFeatures")]
        public virtual System.Collections.Generic.IList<string> AvailableFeatures { get; set; }

        /// Whether this is currently the default version for Cloud Data Fusion
        [Newtonsoft.Json.JsonPropertyAttribute("defaultVersion")]
        public virtual System.Nullable<bool> DefaultVersion { get; set; }

        /// Type represents the release availability of the version
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// The version number of the Data Fusion instance, such as '6.0.1.0'.
        [Newtonsoft.Json.JsonPropertyAttribute("versionNumber")]
        public virtual string VersionNumber { get; set; }

        /// The ETag of the item.
        public virtual string ETag { get; set; }
    }
}