// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.10.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Genomics API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href=''>Genomics API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20160309 (433)
 *      <tr><th>API Docs
 *          <td><a href=''>
 *              </a>
 *      <tr><th>Discovery Name<td>genomics
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Genomics API can be found at
 * <a href=''></a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Genomics.v1
{
    /// <summary>The Genomics Service.</summary>
    public class GenomicsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

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

        /// <summary>Constructs a new service.</summary>
        public GenomicsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public GenomicsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            callsets = new CallsetsResource(this);
            datasets = new DatasetsResource(this);
            operations = new OperationsResource(this);
            readgroupsets = new ReadgroupsetsResource(this);
            reads = new ReadsResource(this);
            references = new ReferencesResource(this);
            referencesets = new ReferencesetsResource(this);
            variants = new VariantsResource(this);
            variantsets = new VariantsetsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "genomics"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://genomics.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Genomics API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data in Google BigQuery</summary>
            public static string Bigquery = "https://www.googleapis.com/auth/bigquery";

            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>Manage your data in Google Cloud Storage</summary>
            public static string DevstorageReadWrite = "https://www.googleapis.com/auth/devstorage.read_write";

            /// <summary>View and manage Genomics data</summary>
            public static string Genomics = "https://www.googleapis.com/auth/genomics";

            /// <summary>View Genomics data</summary>
            public static string GenomicsReadonly = "https://www.googleapis.com/auth/genomics.readonly";

        }



        private readonly CallsetsResource callsets;

        /// <summary>Gets the Callsets resource.</summary>
        public virtual CallsetsResource Callsets
        {
            get { return callsets; }
        }

        private readonly DatasetsResource datasets;

        /// <summary>Gets the Datasets resource.</summary>
        public virtual DatasetsResource Datasets
        {
            get { return datasets; }
        }

        private readonly OperationsResource operations;

        /// <summary>Gets the Operations resource.</summary>
        public virtual OperationsResource Operations
        {
            get { return operations; }
        }

        private readonly ReadgroupsetsResource readgroupsets;

        /// <summary>Gets the Readgroupsets resource.</summary>
        public virtual ReadgroupsetsResource Readgroupsets
        {
            get { return readgroupsets; }
        }

        private readonly ReadsResource reads;

        /// <summary>Gets the Reads resource.</summary>
        public virtual ReadsResource Reads
        {
            get { return reads; }
        }

        private readonly ReferencesResource references;

        /// <summary>Gets the References resource.</summary>
        public virtual ReferencesResource References
        {
            get { return references; }
        }

        private readonly ReferencesetsResource referencesets;

        /// <summary>Gets the Referencesets resource.</summary>
        public virtual ReferencesetsResource Referencesets
        {
            get { return referencesets; }
        }

        private readonly VariantsResource variants;

        /// <summary>Gets the Variants resource.</summary>
        public virtual VariantsResource Variants
        {
            get { return variants; }
        }

        private readonly VariantsetsResource variantsets;

        /// <summary>Gets the Variantsets resource.</summary>
        public virtual VariantsetsResource Variantsets
        {
            get { return variantsets; }
        }
    }

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

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

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

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Alt { get; set; }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

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

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

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

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

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

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

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

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

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

        /// <summary>Initializes Genomics parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    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(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "callsets" collection of methods.</summary>
    public class CallsetsResource
    {
        private const string Resource = "callsets";

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

        /// <summary>Constructs a new resource.</summary>
        public CallsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new call set. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.CallSet body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new call set. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.CallSet>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.CallSet body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.CallSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a call set. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="callSetId">The ID of the call set to be deleted.</param>
        public virtual DeleteRequest Delete(string callSetId)
        {
            return new DeleteRequest(service, callSetId);
        }

        /// <summary>Deletes a call set. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string callSetId)
                : base(service)
            {
                CallSetId = callSetId;
                InitParameters();
            }


            /// <summary>The ID of the call set to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("callSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CallSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/{callSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "callSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "callSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a call set by ID. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="callSetId">The ID of the call set.</param>
        public virtual GetRequest Get(string callSetId)
        {
            return new GetRequest(service, callSetId);
        }

        /// <summary>Gets a call set by ID. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.CallSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string callSetId)
                : base(service)
            {
                CallSetId = callSetId;
                InitParameters();
            }


            /// <summary>The ID of the call set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("callSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CallSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/{callSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "callSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "callSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a call set. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This
        /// method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="callSetId">The ID of the call set to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.CallSet body, string callSetId)
        {
            return new PatchRequest(service, body, callSetId);
        }

        /// <summary>Updates a call set. For the definitions of call sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This
        /// method supports patch semantics.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.CallSet>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.CallSet body, string callSetId)
                : base(service)
            {
                CallSetId = callSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the call set to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("callSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CallSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. At this time, the only mutable field is
            /// name. The only acceptable value is "name". If unspecified, all mutable fields will be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.CallSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/{callSetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "callSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "callSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a list of call sets matching the criteria. For the definitions of call sets and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics) Implements [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/mai
        /// n/resources/avro/variantmethods.avdl#L178).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchCallSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Gets a list of call sets matching the criteria. For the definitions of call sets and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics) Implements [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/mai
        /// n/resources/avro/variantmethods.avdl#L178).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchCallSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchCallSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchCallSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "datasets" collection of methods.</summary>
    public class DatasetsResource
    {
        private const string Resource = "datasets";

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

        /// <summary>Constructs a new resource.</summary>
        public DatasetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new dataset. For the definitions of datasets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.Dataset body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new dataset. For the definitions of datasets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Dataset body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Dataset Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a dataset. For the definitions of datasets and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="datasetId">The ID of the dataset to be deleted.</param>
        public virtual DeleteRequest Delete(string datasetId)
        {
            return new DeleteRequest(service, datasetId);
        }

        /// <summary>Deletes a dataset. For the definitions of datasets and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                InitParameters();
            }


            /// <summary>The ID of the dataset to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a dataset by ID. For the definitions of datasets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="datasetId">The ID of the dataset.</param>
        public virtual GetRequest Get(string datasetId)
        {
            return new GetRequest(service, datasetId);
        }

        /// <summary>Gets a dataset by ID. For the definitions of datasets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                InitParameters();
            }


            /// <summary>The ID of the dataset.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets the access control policy for the dataset. This is empty if the policy or resource does not
        /// exist. See Getting a Policy for more information. For the definitions of datasets and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which policy is being specified. Format is
        /// `datasets/`.</param>
        public virtual GetIamPolicyRequest GetIamPolicy(Google.Apis.Genomics.v1.Data.GetIamPolicyRequest body, string resource)
        {
            return new GetIamPolicyRequest(service, body, resource);
        }

        /// <summary>Gets the access control policy for the dataset. This is empty if the policy or resource does not
        /// exist. See Getting a Policy for more information. For the definitions of datasets and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class GetIamPolicyRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Policy>
        {
            /// <summary>Constructs a new GetIamPolicy request.</summary>
            public GetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.GetIamPolicyRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which policy is being specified. Format is `datasets/`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.GetIamPolicyRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

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

            /// <summary>Initializes GetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^datasets/[^/]*$",
                    });
            }

        }

        /// <summary>Lists datasets within a project. For the definitions of datasets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Lists datasets within a project. For the definitions of datasets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListDatasetsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>Required. The project to list datasets for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }

            /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 50. The
            /// maximum value is 1024.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        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,
                    });
            }

        }

        /// <summary>Updates a dataset. For the definitions of datasets and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports
        /// patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="datasetId">The ID of the dataset to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.Dataset body, string datasetId)
        {
            return new PatchRequest(service, body, datasetId);
        }

        /// <summary>Updates a dataset. For the definitions of datasets and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports
        /// patch semantics.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Dataset body, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the dataset to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. At this time, the only mutable field is
            /// name. The only acceptable value is "name". If unspecified, all mutable fields will be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Dataset Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Sets the access control policy on the specified dataset. Replaces any existing policy. For the
        /// definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) See Setting a Policy for more
        /// information.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which policy is being specified. Format is
        /// `datasets/`.</param>
        public virtual SetIamPolicyRequest SetIamPolicy(Google.Apis.Genomics.v1.Data.SetIamPolicyRequest body, string resource)
        {
            return new SetIamPolicyRequest(service, body, resource);
        }

        /// <summary>Sets the access control policy on the specified dataset. Replaces any existing policy. For the
        /// definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) See Setting a Policy for more
        /// information.</summary>
        public class SetIamPolicyRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Policy>
        {
            /// <summary>Constructs a new SetIamPolicy request.</summary>
            public SetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SetIamPolicyRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which policy is being specified. Format is `datasets/`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


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

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "setIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

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

            /// <summary>Initializes SetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^datasets/[^/]*$",
                    });
            }

        }

        /// <summary>Returns permissions that a caller has on the specified resource. See Testing Permissions for more
        /// information. For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which policy is being specified. Format is
        /// `datasets/`.</param>
        public virtual TestIamPermissionsRequest TestIamPermissions(Google.Apis.Genomics.v1.Data.TestIamPermissionsRequest body, string resource)
        {
            return new TestIamPermissionsRequest(service, body, resource);
        }

        /// <summary>Returns permissions that a caller has on the specified resource. See Testing Permissions for more
        /// information. For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class TestIamPermissionsRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.TestIamPermissionsResponse>
        {
            /// <summary>Constructs a new TestIamPermissions request.</summary>
            public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.TestIamPermissionsRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which policy is being specified. Format is `datasets/`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


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

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "testIamPermissions"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

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

            /// <summary>Initializes TestIamPermissions parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^datasets/[^/]*$",
                    });
            }

        }

        /// <summary>Undeletes a dataset by restoring a dataset which was deleted via this API. For the definitions of
        /// datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This operation is only possible
        /// for a week after the deletion occurred.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="datasetId">The ID of the dataset to be undeleted.</param>
        public virtual UndeleteRequest Undelete(Google.Apis.Genomics.v1.Data.UndeleteDatasetRequest body, string datasetId)
        {
            return new UndeleteRequest(service, body, datasetId);
        }

        /// <summary>Undeletes a dataset by restoring a dataset which was deleted via this API. For the definitions of
        /// datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This operation is only possible
        /// for a week after the deletion occurred.</summary>
        public class UndeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Undelete request.</summary>
            public UndeleteRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.UndeleteDatasetRequest body, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the dataset to be undeleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.UndeleteDatasetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "undelete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}:undelete"; }
            }

            /// <summary>Initializes Undelete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

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

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

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

        }


        /// <summary>Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
        /// cancel the operation, but success is not guaranteed. Clients may use Operations.GetOperation or
        /// Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite
        /// cancellation.</summary>
        /// <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.Genomics.v1.Data.CancelOperationRequest body, string name)
        {
            return new CancelRequest(service, body, name);
        }

        /// <summary>Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
        /// cancel the operation, but success is not guaranteed. Clients may use Operations.GetOperation or
        /// Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite
        /// cancellation.</summary>
        public class CancelRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Cancel request.</summary>
            public CancelRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.CancelOperationRequest body, string name)
                : base(service)
            {
                Name = name;
                Body = body;
                InitParameters();
            }


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


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

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "cancel"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

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

            /// <summary>Initializes Cancel parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations/.*$",
                    });
            }

        }

        /// <summary>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.</summary>
        /// <param name="name">The name of the operation resource.</param>
        public virtual GetRequest Get(string name)
        {
            return new GetRequest(service, name);
        }

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


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


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+name}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations/.*$",
                    });
            }

        }

        /// <summary>Lists operations that match the specified filter in the request.</summary>
        /// <param name="name">The name of the operation collection.</param>
        public virtual ListRequest List(string name)
        {
            return new ListRequest(service, name);
        }

        /// <summary>Lists operations that match the specified filter in the request.</summary>
        public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListOperationsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string name)
                : base(service)
            {
                Name = name;
                InitParameters();
            }


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

            /// <summary>A string for filtering Operations. The following filter fields are supported: * projectId:
            /// Required. Corresponds to OperationMetadata.projectId. * createTime: The time this job was created, in
            /// seconds from the [epoch](http://en.wikipedia.org/wiki/Unix_time). Can use `>=` and/or `= 1432140000` *
            /// `projectId = my-project AND createTime >= 1432140000 AND createTime <= 1432150000 AND status =
            /// RUNNING`</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results to return. If unspecified, defaults to 256. The maximum value is
            /// 2048.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

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


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+name}"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations$",
                    });
                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,
                    });
            }

        }
    }

    /// <summary>The "readgroupsets" collection of methods.</summary>
    public class ReadgroupsetsResource
    {
        private const string Resource = "readgroupsets";

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

        /// <summary>Constructs a new resource.</summary>
        public ReadgroupsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            coveragebuckets = new CoveragebucketsResource(service);

        }

        private readonly CoveragebucketsResource coveragebuckets;

        /// <summary>Gets the Coveragebuckets resource.</summary>
        public virtual CoveragebucketsResource Coveragebuckets
        {
            get { return coveragebuckets; }
        }

        /// <summary>The "coveragebuckets" collection of methods.</summary>
        public class CoveragebucketsResource
        {
            private const string Resource = "coveragebuckets";

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

            /// <summary>Constructs a new resource.</summary>
            public CoveragebucketsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Lists fixed width coverage buckets for a read group set, each of which correspond to a range of
            /// a reference sequence. Each bucket summarizes coverage information across its corresponding genomic
            /// range. For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Coverage is defined as the
            /// number of reads which are aligned to a given base in the reference sequence. Coverage buckets are
            /// available at several precomputed bucket widths, enabling retrieval of various coverage 'zoom levels'.
            /// The caller must have READ permissions for the target read group set.</summary>
            /// <param name="readGroupSetId">Required. The ID of the read group set over which coverage is requested.</param>
            public virtual ListRequest List(string readGroupSetId)
            {
                return new ListRequest(service, readGroupSetId);
            }

            /// <summary>Lists fixed width coverage buckets for a read group set, each of which correspond to a range of
            /// a reference sequence. Each bucket summarizes coverage information across its corresponding genomic
            /// range. For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Coverage is defined as the
            /// number of reads which are aligned to a given base in the reference sequence. Coverage buckets are
            /// available at several precomputed bucket widths, enabling retrieval of various coverage 'zoom levels'.
            /// The caller must have READ permissions for the target read group set.</summary>
            public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListCoverageBucketsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string readGroupSetId)
                    : base(service)
                {
                    ReadGroupSetId = readGroupSetId;
                    InitParameters();
                }


                /// <summary>Required. The ID of the read group set over which coverage is requested.</summary>
                [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ReadGroupSetId { get; private set; }

                /// <summary>The name of the reference to query, within the reference set associated with this query.
                /// Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("referenceName", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ReferenceName { get; set; }

                /// <summary>The start position of the range on the reference, 0-based inclusive. If specified,
                /// `referenceName` must also be specified. Defaults to 0.</summary>
                [Google.Apis.Util.RequestParameterAttribute("start", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> Start { get; set; }

                /// <summary>The end position of the range on the reference, 0-based exclusive. If specified,
                /// `referenceName` must also be specified. If unset or 0, defaults to the length of the
                /// reference.</summary>
                [Google.Apis.Util.RequestParameterAttribute("end", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> End { get; set; }

                /// <summary>The desired width of each reported coverage bucket in base pairs. This will be rounded down
                /// to the nearest precomputed bucket width; the value of which is returned as `bucketWidth` in the
                /// response. Defaults to infinity (each bucket spans an entire reference sequence) or the length of the
                /// target range, if specified. The smallest precomputed `bucketWidth` is currently 2048 base pairs;
                /// this is subject to change.</summary>
                [Google.Apis.Util.RequestParameterAttribute("targetBucketWidth", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> TargetBucketWidth { get; set; }

                /// <summary>The continuation token, which is used to page through large result sets. To get the next
                /// page of results, set this parameter to the value of `nextPageToken` from the previous
                /// response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 1024.
                /// The maximum value is 2048.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/readgroupsets/{readGroupSetId}/coveragebuckets"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "readGroupSetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "readGroupSetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "referenceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "referenceName",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "start", new Google.Apis.Discovery.Parameter
                        {
                            Name = "start",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "end", new Google.Apis.Discovery.Parameter
                        {
                            Name = "end",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "targetBucketWidth", new Google.Apis.Discovery.Parameter
                        {
                            Name = "targetBucketWidth",
                            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,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Deletes a read group set. For the definitions of read group sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="readGroupSetId">The ID of the read group set to be deleted. The caller must have WRITE permissions to
        /// the dataset associated with this read group set.</param>
        public virtual DeleteRequest Delete(string readGroupSetId)
        {
            return new DeleteRequest(service, readGroupSetId);
        }

        /// <summary>Deletes a read group set. For the definitions of read group sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                InitParameters();
            }


            /// <summary>The ID of the read group set to be deleted. The caller must have WRITE permissions to the
            /// dataset associated with this read group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Exports a read group set to a BAM file in Google Cloud Storage. For the definitions of read group
        /// sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Note that currently there may be some differences between exported BAM
        /// files and the original BAM file at the time of import. See
        /// [ImportReadGroupSets](google.genomics.v1.ReadServiceV1.ImportReadGroupSets) for caveats.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="readGroupSetId">Required. The ID of the read group set to export. The caller must have READ access to
        /// this read group set.</param>
        public virtual ExportRequest Export(Google.Apis.Genomics.v1.Data.ExportReadGroupSetRequest body, string readGroupSetId)
        {
            return new ExportRequest(service, body, readGroupSetId);
        }

        /// <summary>Exports a read group set to a BAM file in Google Cloud Storage. For the definitions of read group
        /// sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Note that currently there may be some differences between exported BAM
        /// files and the original BAM file at the time of import. See
        /// [ImportReadGroupSets](google.genomics.v1.ReadServiceV1.ImportReadGroupSets) for caveats.</summary>
        public class ExportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Export request.</summary>
            public ExportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ExportReadGroupSetRequest body, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>Required. The ID of the read group set to export. The caller must have READ access to this read
            /// group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ExportReadGroupSetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "export"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}:export"; }
            }

            /// <summary>Initializes Export parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a read group set by ID. For the definitions of read group sets and other genomics resources,
        /// see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="readGroupSetId">The ID of the read group set.</param>
        public virtual GetRequest Get(string readGroupSetId)
        {
            return new GetRequest(service, readGroupSetId);
        }

        /// <summary>Gets a read group set by ID. For the definitions of read group sets and other genomics resources,
        /// see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ReadGroupSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                InitParameters();
            }


            /// <summary>The ID of the read group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Creates read group sets by asynchronously importing the provided information. For the definitions
        /// of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The caller must have WRITE
        /// permissions to the dataset. ## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import - Tags
        /// will be converted to strings - tag types are not preserved - Comments (`@CO`) in the input file header will
        /// not be preserved - Original header order of references (`@SQ`) will not be preserved - Any reverse stranded
        /// unmapped reads will be reverse complemented, and their qualities (also the "BQ" and "OQ" tags, if any) will
        /// be reversed - Unmapped reads will be stripped of positional information (reference name and
        /// position)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual ImportRequest Import(Google.Apis.Genomics.v1.Data.ImportReadGroupSetsRequest body)
        {
            return new ImportRequest(service, body);
        }

        /// <summary>Creates read group sets by asynchronously importing the provided information. For the definitions
        /// of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The caller must have WRITE
        /// permissions to the dataset. ## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import - Tags
        /// will be converted to strings - tag types are not preserved - Comments (`@CO`) in the input file header will
        /// not be preserved - Original header order of references (`@SQ`) will not be preserved - Any reverse stranded
        /// unmapped reads will be reverse complemented, and their qualities (also the "BQ" and "OQ" tags, if any) will
        /// be reversed - Unmapped reads will be stripped of positional information (reference name and
        /// position)</summary>
        public class ImportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Import request.</summary>
            public ImportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ImportReadGroupSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ImportReadGroupSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "import"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets:import"; }
            }

            /// <summary>Initializes Import parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates a read group set. For the definitions of read group sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This
        /// method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="readGroupSetId">The ID of the read group set to be updated. The caller must have WRITE permissions to
        /// the dataset associated with this read group set.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.ReadGroupSet body, string readGroupSetId)
        {
            return new PatchRequest(service, body, readGroupSetId);
        }

        /// <summary>Updates a read group set. For the definitions of read group sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This
        /// method supports patch semantics.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ReadGroupSet>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ReadGroupSet body, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the read group set to be updated. The caller must have WRITE permissions to the
            /// dataset associated with this read group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. Supported fields: * name. * referenceSetId.
            /// Leaving `updateMask` unset is equivalent to specifying all mutable fields.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ReadGroupSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for read group sets matching the criteria. For the definitions of read group sets and
        /// other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4g
        /// h/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReadGroupSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for read group sets matching the criteria. For the definitions of read group sets and
        /// other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4g
        /// h/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReadGroupSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReadGroupSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReadGroupSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "reads" collection of methods.</summary>
    public class ReadsResource
    {
        private const string Resource = "reads";

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

        /// <summary>Constructs a new resource.</summary>
        public ReadsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets a list of reads for one or more read group sets. For the definitions of read group sets and
        /// other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Reads search operates over a genomic coordinate space of reference
        /// sequence & position defined over the reference sequences to which the requested read group sets are aligned.
        /// If a target positional range is specified, search returns all reads whose alignment to the reference genome
        /// overlap the range. A query which specifies only read group set IDs yields all reads in those read group
        /// sets, including unmapped reads. All reads returned (including reads on subsequent pages) are ordered by
        /// genomic coordinate (by reference sequence, then position). Reads with equivalent genomic coordinates are
        /// returned in an unspecified order. This order is consistent, such that two queries for the same content
        /// (regardless of page size) yield reads in the same order across their respective streams of paginated
        /// responses. Implements [GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/
        /// resources/avro/readmethods.avdl#L85).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReadsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Gets a list of reads for one or more read group sets. For the definitions of read group sets and
        /// other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Reads search operates over a genomic coordinate space of reference
        /// sequence & position defined over the reference sequences to which the requested read group sets are aligned.
        /// If a target positional range is specified, search returns all reads whose alignment to the reference genome
        /// overlap the range. A query which specifies only read group set IDs yields all reads in those read group
        /// sets, including unmapped reads. All reads returned (including reads on subsequent pages) are ordered by
        /// genomic coordinate (by reference sequence, then position). Reads with equivalent genomic coordinates are
        /// returned in an unspecified order. This order is consistent, such that two queries for the same content
        /// (regardless of page size) yield reads in the same order across their respective streams of paginated
        /// responses. Implements [GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/
        /// resources/avro/readmethods.avdl#L85).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReadsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReadsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReadsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/reads/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Returns a stream of all the reads matching the search request, ordered by reference name, position,
        /// and ID.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual StreamRequest Stream(Google.Apis.Genomics.v1.Data.StreamReadsRequest body)
        {
            return new StreamRequest(service, body);
        }

        /// <summary>Returns a stream of all the reads matching the search request, ordered by reference name, position,
        /// and ID.</summary>
        public class StreamRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.StreamReadsResponse>
        {
            /// <summary>Constructs a new Stream request.</summary>
            public StreamRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.StreamReadsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.StreamReadsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "stream"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/reads:stream"; }
            }

            /// <summary>Initializes Stream parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "references" collection of methods.</summary>
    public class ReferencesResource
    {
        private const string Resource = "references";

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

        /// <summary>Constructs a new resource.</summary>
        public ReferencesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            bases = new BasesResource(service);

        }

        private readonly BasesResource bases;

        /// <summary>Gets the Bases resource.</summary>
        public virtual BasesResource Bases
        {
            get { return bases; }
        }

        /// <summary>The "bases" collection of methods.</summary>
        public class BasesResource
        {
            private const string Resource = "bases";

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

            /// <summary>Constructs a new resource.</summary>
            public BasesResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Lists the bases in a reference, optionally restricted to a range. For the definitions of
            /// references and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Implements [GlobalAllianceA
            /// pi.getReferenceBases](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemeth
            /// ods.avdl#L221).</summary>
            /// <param name="referenceId">The ID of the reference.</param>
            public virtual ListRequest List(string referenceId)
            {
                return new ListRequest(service, referenceId);
            }

            /// <summary>Lists the bases in a reference, optionally restricted to a range. For the definitions of
            /// references and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Implements [GlobalAllianceA
            /// pi.getReferenceBases](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemeth
            /// ods.avdl#L221).</summary>
            public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListBasesResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string referenceId)
                    : base(service)
                {
                    ReferenceId = referenceId;
                    InitParameters();
                }


                /// <summary>The ID of the reference.</summary>
                [Google.Apis.Util.RequestParameterAttribute("referenceId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ReferenceId { get; private set; }

                /// <summary>The start position (0-based) of this query. Defaults to 0.</summary>
                [Google.Apis.Util.RequestParameterAttribute("start", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> Start { get; set; }

                /// <summary>The end position (0-based, exclusive) of this query. Defaults to the length of this
                /// reference.</summary>
                [Google.Apis.Util.RequestParameterAttribute("end", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> End { get; set; }

                /// <summary>The continuation token, which is used to page through large result sets. To get the next
                /// page of results, set this parameter to the value of `nextPageToken` from the previous
                /// response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The maximum number of bases to return in a single page. If unspecified, defaults to 200Kbp
                /// (kilo base pairs). The maximum value is 10Mbp (mega base pairs).</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/references/{referenceId}/bases"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "referenceId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "referenceId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "start", new Google.Apis.Discovery.Parameter
                        {
                            Name = "start",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "end", new Google.Apis.Discovery.Parameter
                        {
                            Name = "end",
                            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,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Gets a reference. For the definitions of references and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Implements [GlobalAll
        /// ianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods
        /// .avdl#L158).</summary>
        /// <param name="referenceId">The ID of the reference.</param>
        public virtual GetRequest Get(string referenceId)
        {
            return new GetRequest(service, referenceId);
        }

        /// <summary>Gets a reference. For the definitions of references and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Implements [GlobalAll
        /// ianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods
        /// .avdl#L158).</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Reference>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string referenceId)
                : base(service)
            {
                ReferenceId = referenceId;
                InitParameters();
            }


            /// <summary>The ID of the reference.</summary>
            [Google.Apis.Util.RequestParameterAttribute("referenceId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReferenceId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/references/{referenceId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "referenceId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "referenceId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for references which match the given criteria. For the definitions of references and other
        /// genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-
        /// google-genomics) Implements [GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.
        /// 1/src/main/resources/avro/referencemethods.avdl#L146).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReferencesRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for references which match the given criteria. For the definitions of references and other
        /// genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-
        /// google-genomics) Implements [GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.
        /// 1/src/main/resources/avro/referencemethods.avdl#L146).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReferencesResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReferencesRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReferencesRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/references/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "referencesets" collection of methods.</summary>
    public class ReferencesetsResource
    {
        private const string Resource = "referencesets";

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

        /// <summary>Constructs a new resource.</summary>
        public ReferencesetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets a reference set. For the definitions of references and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        /// Implements [GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resourc
        /// es/avro/referencemethods.avdl#L83).</summary>
        /// <param name="referenceSetId">The ID of the reference set.</param>
        public virtual GetRequest Get(string referenceSetId)
        {
            return new GetRequest(service, referenceSetId);
        }

        /// <summary>Gets a reference set. For the definitions of references and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        /// Implements [GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resourc
        /// es/avro/referencemethods.avdl#L83).</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ReferenceSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string referenceSetId)
                : base(service)
            {
                ReferenceSetId = referenceSetId;
                InitParameters();
            }


            /// <summary>The ID of the reference set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("referenceSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReferenceSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/referencesets/{referenceSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "referenceSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "referenceSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for reference sets which match the given criteria. For the definitions of references and
        /// other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchReferenceSets](https://github.com/ga4g
        /// h/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReferenceSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for reference sets which match the given criteria. For the definitions of references and
        /// other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchReferenceSets](https://github.com/ga4g
        /// h/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71)</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReferenceSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReferenceSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReferenceSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/referencesets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "variants" collection of methods.</summary>
    public class VariantsResource
    {
        private const string Resource = "variants";

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

        /// <summary>Constructs a new resource.</summary>
        public VariantsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new variant. For the definitions of variants and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.Variant body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new variant. For the definitions of variants and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Variant>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Variant body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Variant Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a variant. For the definitions of variants and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="variantId">The ID of the variant to be deleted.</param>
        public virtual DeleteRequest Delete(string variantId)
        {
            return new DeleteRequest(service, variantId);
        }

        /// <summary>Deletes a variant. For the definitions of variants and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string variantId)
                : base(service)
            {
                VariantId = variantId;
                InitParameters();
            }


            /// <summary>The ID of the variant to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/{variantId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a variant by ID. For the definitions of variants and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="variantId">The ID of the variant.</param>
        public virtual GetRequest Get(string variantId)
        {
            return new GetRequest(service, variantId);
        }

        /// <summary>Gets a variant by ID. For the definitions of variants and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Variant>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string variantId)
                : base(service)
            {
                VariantId = variantId;
                InitParameters();
            }


            /// <summary>The ID of the variant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/{variantId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Creates variant data by asynchronously importing the provided information. For the definitions of
        /// variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The variants for import will be
        /// merged with any existing variant that matches its reference sequence, start, end, reference bases, and
        /// alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call
        /// information from the new variant is added to the existing variant, and other fields (such as key/value
        /// pairs) are discarded. In particular, this means for merged VCF variants that have conflicting INFO fields,
        /// some data will be arbitrarily discarded. As a special case, for single-sample VCF files, QUAL and FILTER
        /// fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported
        /// VCF headers are appended to the metadata already in a variant set.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual ImportRequest Import(Google.Apis.Genomics.v1.Data.ImportVariantsRequest body)
        {
            return new ImportRequest(service, body);
        }

        /// <summary>Creates variant data by asynchronously importing the provided information. For the definitions of
        /// variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The variants for import will be
        /// merged with any existing variant that matches its reference sequence, start, end, reference bases, and
        /// alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call
        /// information from the new variant is added to the existing variant, and other fields (such as key/value
        /// pairs) are discarded. In particular, this means for merged VCF variants that have conflicting INFO fields,
        /// some data will be arbitrarily discarded. As a special case, for single-sample VCF files, QUAL and FILTER
        /// fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported
        /// VCF headers are appended to the metadata already in a variant set.</summary>
        public class ImportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Import request.</summary>
            public ImportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ImportVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ImportVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "import"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants:import"; }
            }

            /// <summary>Initializes Import parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Merges the given variants with existing variants. For the definitions of variants and other
        /// genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-
        /// google-genomics) Each variant will be merged with an existing variant that matches its reference sequence,
        /// start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created.
        /// When variants are merged, the call information from the new variant is added to the existing variant, and
        /// other fields (such as key/value pairs) are discarded.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual MergeRequest Merge(Google.Apis.Genomics.v1.Data.MergeVariantsRequest body)
        {
            return new MergeRequest(service, body);
        }

        /// <summary>Merges the given variants with existing variants. For the definitions of variants and other
        /// genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-
        /// google-genomics) Each variant will be merged with an existing variant that matches its reference sequence,
        /// start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created.
        /// When variants are merged, the call information from the new variant is added to the existing variant, and
        /// other fields (such as key/value pairs) are discarded.</summary>
        public class MergeRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Merge request.</summary>
            public MergeRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.MergeVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.MergeVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "merge"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants:merge"; }
            }

            /// <summary>Initializes Merge parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates a variant. For the definitions of variants and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports
        /// patch semantics. Returns the modified variant without its calls.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="variantId">The ID of the variant to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.Variant body, string variantId)
        {
            return new PatchRequest(service, body, variantId);
        }

        /// <summary>Updates a variant. For the definitions of variants and other genomics resources, see [Fundamentals
        /// of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports
        /// patch semantics. Returns the modified variant without its calls.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Variant>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Variant body, string variantId)
                : base(service)
            {
                VariantId = variantId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the variant to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. At this time, mutable fields are names and
            /// info. Acceptable values are "names" and "info". If unspecified, all mutable fields will be
            /// updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Variant Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/{variantId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a list of variants matching the criteria. For the definitions of variants and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics) Implements [GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/mai
        /// n/resources/avro/variantmethods.avdl#L126).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchVariantsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Gets a list of variants matching the criteria. For the definitions of variants and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics) Implements [GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/mai
        /// n/resources/avro/variantmethods.avdl#L126).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchVariantsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Returns a stream of all the variants matching the search request, ordered by reference name,
        /// position, and ID.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual StreamRequest Stream(Google.Apis.Genomics.v1.Data.StreamVariantsRequest body)
        {
            return new StreamRequest(service, body);
        }

        /// <summary>Returns a stream of all the variants matching the search request, ordered by reference name,
        /// position, and ID.</summary>
        public class StreamRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.StreamVariantsResponse>
        {
            /// <summary>Constructs a new Stream request.</summary>
            public StreamRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.StreamVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.StreamVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "stream"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants:stream"; }
            }

            /// <summary>Initializes Stream parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "variantsets" collection of methods.</summary>
    public class VariantsetsResource
    {
        private const string Resource = "variantsets";

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

        /// <summary>Constructs a new resource.</summary>
        public VariantsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new variant set. For the definitions of variant sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The
        /// provided variant set must have a valid `datasetId` set - all other fields are optional. Note that the `id`
        /// field will be ignored, as this is assigned by the server.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.VariantSet body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new variant set. For the definitions of variant sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The
        /// provided variant set must have a valid `datasetId` set - all other fields are optional. Note that the `id`
        /// field will be ignored, as this is assigned by the server.</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.VariantSet>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.VariantSet body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.VariantSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a variant set including all variants, call sets, and calls within. This is not reversible.
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="variantSetId">The ID of the variant set to be deleted.</param>
        public virtual DeleteRequest Delete(string variantSetId)
        {
            return new DeleteRequest(service, variantSetId);
        }

        /// <summary>Deletes a variant set including all variants, call sets, and calls within. This is not reversible.
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                InitParameters();
            }


            /// <summary>The ID of the variant set to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Exports variant set data to an external destination. For the definitions of variant sets and other
        /// genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-
        /// google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="variantSetId">Required. The ID of the variant set that contains variant data which should be exported.
        /// The caller must have READ access to this variant set.</param>
        public virtual ExportRequest Export(Google.Apis.Genomics.v1.Data.ExportVariantSetRequest body, string variantSetId)
        {
            return new ExportRequest(service, body, variantSetId);
        }

        /// <summary>Exports variant set data to an external destination. For the definitions of variant sets and other
        /// genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-
        /// google-genomics)</summary>
        public class ExportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Export request.</summary>
            public ExportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ExportVariantSetRequest body, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>Required. The ID of the variant set that contains variant data which should be exported. The
            /// caller must have READ access to this variant set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ExportVariantSetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "export"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}:export"; }
            }

            /// <summary>Initializes Export parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a variant set by ID. For the definitions of variant sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="variantSetId">Required. The ID of the variant set.</param>
        public virtual GetRequest Get(string variantSetId)
        {
            return new GetRequest(service, variantSetId);
        }

        /// <summary>Gets a variant set by ID. For the definitions of variant sets and other genomics resources, see
        /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.VariantSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                InitParameters();
            }


            /// <summary>Required. The ID of the variant set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a variant set using patch semantics. For the definitions of variant sets and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="variantSetId">The ID of the variant to be updated (must already exist).</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.VariantSet body, string variantSetId)
        {
            return new PatchRequest(service, body, variantSetId);
        }

        /// <summary>Updates a variant set using patch semantics. For the definitions of variant sets and other genomics
        /// resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-
        /// genomics)</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.VariantSet>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.VariantSet body, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the variant to be updated (must already exist).</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. Supported fields: * metadata. Leaving
            /// `updateMask` unset is equivalent to specifying all mutable fields.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.VariantSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Returns a list of all variant sets matching search criteria. For the definitions of variant sets
        /// and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/
        /// schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L49).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchVariantSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Returns a list of all variant sets matching search criteria. For the definitions of variant sets
        /// and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
        /// /fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/
        /// schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L49).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchVariantSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchVariantSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchVariantSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }
}

namespace Google.Apis.Genomics.v1.Data
{    

    /// <summary>Associates `members` with a `role`.</summary>
    public class Binding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities requesting access for a Cloud Platform 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@gmail.com` or `joe@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`. * `domain:{domain}`: A Google Apps domain name that represents all the users
        /// of that domain. For example, `google.com` or `example.com`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

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

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

    /// <summary>A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For
    /// more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class CallSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The date this call set was created in milliseconds from the epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("created")]
        public virtual System.Nullable<long> Created { get; set; } 

        /// <summary>The server-generated call set ID, unique across all call sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional call set information. This must be of the form map (string key mapping to a
        /// list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The call set name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The sample ID this call set corresponds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sampleId")]
        public virtual string SampleId { get; set; } 

        /// <summary>The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a
        /// call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1
        /// API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetIds")]
        public virtual System.Collections.Generic.IList<string> VariantSetIds { get; set; } 

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

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

    /// <summary>A single CIGAR operation.</summary>
    public class CigarUnit : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("operation")]
        public virtual string Operation { get; set; } 

        /// <summary>The number of genomic bases that the operation runs for. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationLength")]
        public virtual System.Nullable<long> OperationLength { get; set; } 

        /// <summary>`referenceSequence` is only used at mismatches (`SEQUENCE_MISMATCH`) and deletions (`DELETE`).
        /// Filling this field replaces SAM's MD tag. If the relevant information is not available, this field is
        /// unset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSequence")]
        public virtual string ReferenceSequence { get; set; } 

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

    /// <summary>A bucket over which read coverage has been precomputed. A bucket corresponds to a specific range of the
    /// reference sequence.</summary>
    public class CoverageBucket : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The average number of reads which are aligned to each individual reference base in this
        /// bucket.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("meanCoverage")]
        public virtual System.Nullable<float> MeanCoverage { get; set; } 

        /// <summary>The genomic coordinate range spanned by this bucket.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual Range Range { get; set; } 

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

    /// <summary>A Dataset is a collection of genomic data. For more genomics resource definitions, see [Fundamentals of
    /// Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
    public class Dataset : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time this dataset was created, in seconds from the epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual string CreateTime { get; set; } 

        /// <summary>The server-generated dataset ID, unique across all datasets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The dataset name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The Google Developers Console project ID that this dataset belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

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

    /// <summary>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); } The JSON representation for `Empty` is empty
    /// JSON object `{}`.</summary>
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Experiment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The instrument model used as part of this experiment. This maps to sequencing technology in the SAM
        /// spec.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instrumentModel")]
        public virtual string InstrumentModel { get; set; } 

        /// <summary>A client-supplied library identifier; a library is a collection of DNA fragments which have been
        /// prepared for sequencing from a sample. This field is important for quality control as error or bias can be
        /// introduced during sample preparation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("libraryId")]
        public virtual string LibraryId { get; set; } 

        /// <summary>The platform unit used as part of this experiment, for example flowcell-barcode.lane for Illumina
        /// or slide for SOLiD. Corresponds to the @RG PU field in the SAM spec.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("platformUnit")]
        public virtual string PlatformUnit { get; set; } 

        /// <summary>The sequencing center used as part of this experiment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sequencingCenter")]
        public virtual string SequencingCenter { get; set; } 

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

    /// <summary>The read group set export request.</summary>
    public class ExportReadGroupSetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. A Google Cloud Storage URI for the exported BAM file. The currently authenticated user
        /// must have write access to the new file. An error will be returned if the URI already contains
        /// data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exportUri")]
        public virtual string ExportUri { get; set; } 

        /// <summary>Required. The Google Developers Console project ID that owns this export. The caller must have
        /// WRITE access to this project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The reference names to export. If this is not specified, all reference sequences, including
        /// unmapped reads, are exported. Use `*` to export only unmapped reads.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceNames")]
        public virtual System.Collections.Generic.IList<string> ReferenceNames { get; set; } 

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

    /// <summary>The variant data export request.</summary>
    public class ExportVariantSetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The BigQuery dataset to export data to. This dataset must already exist. Note that this
        /// is distinct from the Genomics concept of "dataset".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bigqueryDataset")]
        public virtual string BigqueryDataset { get; set; } 

        /// <summary>Required. The BigQuery table to export data to. If the table doesn't exist, it will be created. If
        /// it already exists, it will be overwritten.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bigqueryTable")]
        public virtual string BigqueryTable { get; set; } 

        /// <summary>If provided, only variant call information from the specified call sets will be exported. By
        /// default all variant calls are exported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

        /// <summary>The format for the exported data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual string Format { get; set; } 

        /// <summary>Required. The Google Cloud project ID that owns the destination BigQuery dataset. The caller must
        /// have WRITE access to this project. This project will also own the resulting export job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

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

    /// <summary>Request message for `GetIamPolicy` method.</summary>
    public class GetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read group set import request.</summary>
    public class ImportReadGroupSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The ID of the dataset these read group sets will belong to. The caller must have WRITE
        /// permissions to this dataset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>The partition strategy describes how read groups are partitioned into read group sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("partitionStrategy")]
        public virtual string PartitionStrategy { get; set; } 

        /// <summary>The reference set to which the imported read group sets are aligned to, if any. The reference names
        /// of this reference set must be a superset of those found in the imported file headers. If no reference set id
        /// is provided, a best effort is made to associate with a matching reference set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>A list of URIs pointing at [BAM files](https://samtools.github.io/hts-specs/SAMv1.pdf) in Google
        /// Cloud Storage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUris")]
        public virtual System.Collections.Generic.IList<string> SourceUris { get; set; } 

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

    /// <summary>The read group set import response.</summary>
    public class ImportReadGroupSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>IDs of the read group sets that were created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetIds")]
        public virtual System.Collections.Generic.IList<string> ReadGroupSetIds { get; set; } 

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

    /// <summary>The variant data import request.</summary>
    public class ImportVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The format of the variant data being imported. If unspecified, defaults to to `VCF`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual string Format { get; set; } 

        /// <summary>Convert reference names to the canonical representation. hg19 haploytypes (those reference names
        /// containing "_hap") are not modified in any way. All other reference names are modified according to the
        /// following rules: The reference name is capitalized. The "chr" prefix is dropped for all autosomes and sex
        /// chromsomes. For example "chr17" becomes "17" and "chrX" becomes "X". All mitochondrial chromosomes ("chrM",
        /// "chrMT", etc) become "MT".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("normalizeReferenceNames")]
        public virtual System.Nullable<bool> NormalizeReferenceNames { get; set; } 

        /// <summary>A list of URIs referencing variant files in Google Cloud Storage. URIs can include wildcards [as
        /// described here](https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames). Note that recursive
        /// wildcards ('**') are not supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUris")]
        public virtual System.Collections.Generic.IList<string> SourceUris { get; set; } 

        /// <summary>Required. The variant set to which variant data should be imported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

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

    /// <summary>The variant data import response.</summary>
    public class ImportVariantsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>IDs of the call sets created during the import.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

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

    /// <summary>A linear alignment can be represented by one CIGAR string. Describes the mapped position and local
    /// alignment of the read to the reference.</summary>
    public class LinearAlignment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Represents the local alignment of this sequence (alignment matches, indels, etc) against the
        /// reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cigar")]
        public virtual System.Collections.Generic.IList<CigarUnit> Cigar { get; set; } 

        /// <summary>The mapping quality of this alignment. Represents how likely the read maps to this position as
        /// opposed to other locations. Specifically, this is -10 log10 Pr(mapping position is wrong), rounded to the
        /// nearest integer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mappingQuality")]
        public virtual System.Nullable<int> MappingQuality { get; set; } 

        /// <summary>The position of this alignment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Position Position { get; set; } 

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

    public class ListBasesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The offset position (0-based) of the given `sequence` from the start of this `Reference`. This
        /// value will differ for each page in a paginated request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offset")]
        public virtual System.Nullable<long> Offset { get; set; } 

        /// <summary>A substring of the bases that make up this reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sequence")]
        public virtual string Sequence { get; set; } 

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

    public class ListCoverageBucketsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The length of each coverage bucket in base pairs. Note that buckets at the end of a reference
        /// sequence may be shorter. This value is omitted if the bucket width is infinity (the default behaviour, with
        /// no range or `targetBucketWidth`).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bucketWidth")]
        public virtual System.Nullable<long> BucketWidth { get; set; } 

        /// <summary>The coverage buckets. The list of buckets is sparse; a bucket with 0 overlapping reads is not
        /// returned. A bucket never crosses more than one reference sequence. Each bucket has width `bucketWidth`,
        /// unless its end is the end of the reference sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("coverageBuckets")]
        public virtual System.Collections.Generic.IList<CoverageBucket> CoverageBuckets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

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

    /// <summary>The dataset list response.</summary>
    public class ListDatasetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of matching Datasets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasets")]
        public virtual System.Collections.Generic.IList<Dataset> Datasets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

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

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

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

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

    public class MergeVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The destination variant set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

        /// <summary>The variants to be merged with existing variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variants")]
        public virtual System.Collections.Generic.IList<Variant> Variants { get; set; } 

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

    /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If the value is `false`, it means the operation is still in progress. If true, the operation is
        /// completed, and either `error` or `response` is available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

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

        /// <summary>An OperationMetadata object. This will always be returned with the Operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> Metadata { get; set; } 

        /// <summary>The server-assigned name, which is only unique within the same service that originally returns it.
        /// For example: `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>If importing ReadGroupSets, an ImportReadGroupSetsResponse is returned. If importing Variants, an
        /// ImportVariantsResponse is returned. For exports, an empty response is returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string,object> Response { get; set; } 

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

    /// <summary>An event that occurred during an Operation.</summary>
    public class OperationEvent : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required description of event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

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

    /// <summary>Metadata describing an Operation.</summary>
    public class OperationMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time at which the job was submitted to the Genomics service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual string CreateTime { get; set; } 

        /// <summary>Optional event messages that were generated during the job's execution. This also contains any
        /// warnings that were generated during import or export.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("events")]
        public virtual System.Collections.Generic.IList<OperationEvent> Events { get; set; } 

        /// <summary>The Google Cloud Project in which the job is scoped.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The original request that started the operation. Note that this will be in current version of the
        /// API. If the operation was started with v1beta2 API and a GetOperation is performed on v1 API, a v1 request
        /// will be returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("request")]
        public virtual System.Collections.Generic.IDictionary<string,object> Request { get; set; } 

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

    /// <summary>Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies
    /// for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members`
    /// to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A
    /// `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner",
    /// "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-
    /// app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For
    /// a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).</summary>
    public class Policy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same
        /// `role`. `bindings` with no members will result in an error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bindings")]
        public virtual System.Collections.Generic.IList<Binding> Bindings { get; set; } 

        /// <summary>`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. If no `etag`
        /// is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Version of the `Policy`. The default version is 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Nullable<int> Version { get; set; } 

    }    

    /// <summary>An abstraction for referring to a genomic position, in relation to some already known reference. For
    /// now, represents a genomic position as a reference name, a base number on that reference (0-based), and a
    /// determination of forward or reverse strand.</summary>
    public class Position : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The 0-based offset from the start of the forward strand for that reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual System.Nullable<long> PositionValue { get; set; } 

        /// <summary>The name of the reference in whatever reference set is being used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>Whether this position is on the reverse strand, as opposed to the forward strand.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reverseStrand")]
        public virtual System.Nullable<bool> ReverseStrand { get; set; } 

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

    public class Program : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The command line used to run this program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("commandLine")]
        public virtual string CommandLine { get; set; } 

        /// <summary>The user specified locally unique ID of the program. Used along with `prevProgramId` to define an
        /// ordering between programs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The display name of the program. This is typically the colloquial name of the tool used, for
        /// example 'bwa' or 'picard'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ID of the program run before this one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prevProgramId")]
        public virtual string PrevProgramId { get; set; } 

        /// <summary>The version of the program run.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

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

    /// <summary>A 0-based half-open genomic coordinate range for search requests.</summary>
    public class Range : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end position of the range on the reference, 0-based exclusive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The reference sequence name, for example `chr1`, `1`, or `chrX`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

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

    /// <summary>A read alignment describes a linear alignment of a string of DNA to a reference sequence, in addition
    /// to metadata about the fragment (the molecule of DNA sequenced) and the read (the bases which were read by the
    /// sequencer). A read is equivalent to a line in a SAM file. A read belongs to exactly one read group and exactly
    /// one read group set. For more genomics resource definitions, see [Fundamentals of Google
    /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) ### Reverse-stranded reads Mapped
    /// reads (reads having a non-null `alignment`) can be aligned to either the forward or the reverse strand of their
    /// associated reference. Strandedness of a mapped read is encoded by `alignment.position.reverseStrand`. If we
    /// consider the reference to be a forward-stranded coordinate space of `[0, reference.length)` with `0` as the
    /// left-most position and `reference.length` as the right-most position, reads are always aligned left to right.
    /// That is, `alignment.position.position` always refers to the left-most reference coordinate and `alignment.cigar`
    /// describes the alignment of this read to the reference from left to right. All per-base fields such as
    /// `alignedSequence` and `alignedQuality` share this same left-to-right orientation; this is true of reads which
    /// are aligned to either strand. For reverse-stranded reads, this means that `alignedSequence` is the reverse
    /// complement of the bases that were originally reported by the sequencing machine. ### Generating a reference-
    /// aligned sequence string When interacting with mapped reads, it's often useful to produce a string representing
    /// the local alignment of the read to reference. The following pseudocode demonstrates one way of doing this: out =
    /// "" offset = 0 for c in read.alignment.cigar { switch c.operation { case "ALIGNMENT_MATCH", "SEQUENCE_MATCH",
    /// "SEQUENCE_MISMATCH": out += read.alignedSequence[offset:offset+c.operationLength] offset += c.operationLength
    /// break case "CLIP_SOFT", "INSERT": offset += c.operationLength break case "PAD": out += repeat("*",
    /// c.operationLength) break case "DELETE": out += repeat("-", c.operationLength) break case "SKIP": out += repeat("
    /// ", c.operationLength) break case "CLIP_HARD": break } } return out ### Converting to SAM's CIGAR string The
    /// following pseudocode generates a SAM CIGAR string from the `cigar` field. Note that this is a lossy conversion
    /// (`cigar.referenceSequence` is lost). cigarMap = { "ALIGNMENT_MATCH": "M", "INSERT": "I", "DELETE": "D", "SKIP":
    /// "N", "CLIP_SOFT": "S", "CLIP_HARD": "H", "PAD": "P", "SEQUENCE_MATCH": "=", "SEQUENCE_MISMATCH": "X", } cigarStr
    /// = "" for c in read.alignment.cigar { cigarStr += c.operationLength + cigarMap[c.operation] } return
    /// cigarStr</summary>
    public class Read : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The quality of the read sequence contained in this alignment record (equivalent to QUAL in SAM).
        /// `alignedSequence` and `alignedQuality` may be shorter than the full read sequence and quality. This will
        /// occur if the alignment is part of a chimeric alignment, or if the read was trimmed. When this occurs, the
        /// CIGAR for this read will begin/end with a hard clip operator that will indicate the length of the excised
        /// sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignedQuality")]
        public virtual System.Collections.Generic.IList<System.Nullable<int>> AlignedQuality { get; set; } 

        /// <summary>The bases of the read sequence contained in this alignment record, **without CIGAR operations
        /// applied** (equivalent to SEQ in SAM). `alignedSequence` and `alignedQuality` may be shorter than the full
        /// read sequence and quality. This will occur if the alignment is part of a chimeric alignment, or if the read
        /// was trimmed. When this occurs, the CIGAR for this read will begin/end with a hard clip operator that will
        /// indicate the length of the excised sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignedSequence")]
        public virtual string AlignedSequence { get; set; } 

        /// <summary>The linear alignment for this alignment record. This field is null for unmapped reads.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignment")]
        public virtual LinearAlignment Alignment { get; set; } 

        /// <summary>The fragment is a PCR or optical duplicate (SAM flag 0x400).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("duplicateFragment")]
        public virtual System.Nullable<bool> DuplicateFragment { get; set; } 

        /// <summary>Whether this read did not pass filters, such as platform or vendor quality controls (SAM flag
        /// 0x200).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("failedVendorQualityChecks")]
        public virtual System.Nullable<bool> FailedVendorQualityChecks { get; set; } 

        /// <summary>The observed length of the fragment, equivalent to TLEN in SAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fragmentLength")]
        public virtual System.Nullable<int> FragmentLength { get; set; } 

        /// <summary>The fragment name. Equivalent to QNAME (query template name) in SAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fragmentName")]
        public virtual string FragmentName { get; set; } 

        /// <summary>The server-generated read ID, unique across all reads. This is different from the
        /// `fragmentName`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read alignment information. This must be of the form map (string key mapping to
        /// a list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The mapping of the primary alignment of the `(readNumber+1)%numberReads` read in the fragment. It
        /// replaces mate position and mate strand in SAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextMatePosition")]
        public virtual Position NextMatePosition { get; set; } 

        /// <summary>The number of reads in the fragment (extension to SAM flag 0x1).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numberReads")]
        public virtual System.Nullable<int> NumberReads { get; set; } 

        /// <summary>The orientation and the distance between reads from the fragment are consistent with the sequencing
        /// protocol (SAM flag 0x2).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properPlacement")]
        public virtual System.Nullable<bool> ProperPlacement { get; set; } 

        /// <summary>The ID of the read group this read belongs to. A read belongs to exactly one read group. This is a
        /// server-generated ID which is distinct from SAM's RG tag (for that value, see ReadGroup.name).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupId")]
        public virtual string ReadGroupId { get; set; } 

        /// <summary>The ID of the read group set this read belongs to. A read belongs to exactly one read group
        /// set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetId")]
        public virtual string ReadGroupSetId { get; set; } 

        /// <summary>The read number in sequencing. 0-based and less than numberReads. This field replaces SAM flag 0x40
        /// and 0x80.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readNumber")]
        public virtual System.Nullable<int> ReadNumber { get; set; } 

        /// <summary>Whether this alignment is secondary. Equivalent to SAM flag 0x100. A secondary alignment represents
        /// an alternative to the primary alignment for this read. Aligners may return secondary alignments if a read
        /// can map ambiguously to multiple coordinates in the genome. By convention, each read has one and only one
        /// alignment where both `secondaryAlignment` and `supplementaryAlignment` are false.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("secondaryAlignment")]
        public virtual System.Nullable<bool> SecondaryAlignment { get; set; } 

        /// <summary>Whether this alignment is supplementary. Equivalent to SAM flag 0x800. Supplementary alignments are
        /// used in the representation of a chimeric alignment. In a chimeric alignment, a read is split into multiple
        /// linear alignments that map to different reference contigs. The first linear alignment in the read will be
        /// designated as the representative alignment; the remaining linear alignments will be designated as
        /// supplementary alignments. These alignments may have different mapping quality scores. In each linear
        /// alignment in a chimeric alignment, the read will be hard clipped. The `alignedSequence` and `alignedQuality`
        /// fields in the alignment record will only represent the bases for its respective linear alignment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("supplementaryAlignment")]
        public virtual System.Nullable<bool> SupplementaryAlignment { get; set; } 

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

    /// <summary>A read group is all the data that's processed the same way by the sequencer.</summary>
    public class ReadGroup : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this read group belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>A free-form text description of this read group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The experiment used to generate this read group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("experiment")]
        public virtual Experiment Experiment { get; set; } 

        /// <summary>The server-generated read group ID, unique for all read groups. Note: This is different than the
        /// @RG ID field in the SAM spec. For that value, see name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read group information. This must be of the form map (string key mapping to a
        /// list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The read group name. This corresponds to the @RG ID field in the SAM spec.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The predicted insert size of this read group. The insert size is the length the sequenced DNA
        /// fragment from end-to-end, not including the adapters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedInsertSize")]
        public virtual System.Nullable<int> PredictedInsertSize { get; set; } 

        /// <summary>The programs used to generate this read group. Programs are always identical for all read groups
        /// within a read group set. For this reason, only the first read group in a returned set will have this field
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("programs")]
        public virtual System.Collections.Generic.IList<Program> Programs { get; set; } 

        /// <summary>The reference set the reads in this read group are aligned to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>A client-supplied sample identifier for the reads in this read group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sampleId")]
        public virtual string SampleId { get; set; } 

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

    /// <summary>A read group set is a logical collection of read groups, which are collections of reads produced by a
    /// sequencer. A read group set typically models reads corresponding to one sample, sequenced one way, and aligned
    /// one way. * A read group set belongs to one dataset. * A read group belongs to one read group set. * A read
    /// belongs to one read group. For more genomics resource definitions, see [Fundamentals of Google
    /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
    public class ReadGroupSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this read group set belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>The filename of the original source file for this read group set, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filename")]
        public virtual string Filename { get; set; } 

        /// <summary>The server-generated read group set ID, unique for all read group sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read group set information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The read group set name. By default this will be initialized to the sample name of the sequenced
        /// data contained in this set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The read groups in this set. There are typically 1-10 read groups in a read group set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroups")]
        public virtual System.Collections.Generic.IList<ReadGroup> ReadGroups { get; set; } 

        /// <summary>The reference set to which the reads in this read group set are aligned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

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

    /// <summary>A reference is a canonical assembled DNA sequence, intended to act as a reference coordinate space for
    /// other genomic annotations. A single reference might represent the human chromosome 1 or mitochandrial DNA, for
    /// instance. A reference belongs to one or more reference sets. For more genomics resource definitions, see
    /// [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
    public class Reference : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The server-generated reference ID, unique across all references.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The length of this reference's sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("length")]
        public virtual System.Nullable<long> Length { get; set; } 

        /// <summary>MD5 of the upper-case sequence excluding all whitespace characters (this is equivalent to SQ:M5 in
        /// SAM). This value is represented in lower case hexadecimal format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksum")]
        public virtual string Md5checksum { get; set; } 

        /// <summary>The name of this reference, for example `22`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ncbiTaxonId")]
        public virtual System.Nullable<int> NcbiTaxonId { get; set; } 

        /// <summary>All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally with a version number,
        /// for example `GCF_000001405.26`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceAccessions")]
        public virtual System.Collections.Generic.IList<string> SourceAccessions { get; set; } 

        /// <summary>The URI from which the sequence was obtained. Typically specifies a FASTA format file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUri")]
        public virtual string SourceUri { get; set; } 

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

    /// <summary>ReferenceBound records an upper bound for the starting coordinate of variants in a particular
    /// reference.</summary>
    public class ReferenceBound : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the reference associated with this reference bound.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>An upper bound (inclusive) on the starting coordinate of any variant in the reference
        /// sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("upperBound")]
        public virtual System.Nullable<long> UpperBound { get; set; } 

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

    /// <summary>A reference set is a set of references which typically comprise a reference assembly for a species,
    /// such as `GRCh38` which is representative of the human genome. A reference set defines a common coordinate space
    /// for comparing reference-aligned experimental data. A reference set contains 1 or more references. For more
    /// genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class ReferenceSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Public id of this reference set, such as `GRCh37`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("assemblyId")]
        public virtual string AssemblyId { get; set; } 

        /// <summary>Free text description of this reference set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The server-generated reference set ID, unique across all reference sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Order-independent MD5 checksum which identifies this reference set. The checksum is computed by
        /// sorting all lower case hexidecimal string `reference.md5checksum` (for all reference in this set) in
        /// ascending lexicographic order, concatenating, and taking the MD5 of that value. The resulting value is
        /// represented in lower case hexadecimal format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksum")]
        public virtual string Md5checksum { get; set; } 

        /// <summary>ID from http://www.ncbi.nlm.nih.gov/taxonomy (for example, 9606 for human) indicating the species
        /// which this reference set is intended to model. Note that contained references may specify a different
        /// `ncbiTaxonId`, as assemblies may contain reference sequences which do not belong to the modeled species, for
        /// example EBV in a human reference genome.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ncbiTaxonId")]
        public virtual System.Nullable<int> NcbiTaxonId { get; set; } 

        /// <summary>The IDs of the reference objects that are part of this set. `Reference.md5checksum` must be unique
        /// within this set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceIds")]
        public virtual System.Collections.Generic.IList<string> ReferenceIds { get; set; } 

        /// <summary>All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally with a version number,
        /// for example `NC_000001.11`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceAccessions")]
        public virtual System.Collections.Generic.IList<string> SourceAccessions { get; set; } 

        /// <summary>The URI from which the references were obtained.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUri")]
        public virtual string SourceUri { get; set; } 

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

    /// <summary>The call set search request.</summary>
    public class SearchCallSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Only return call sets for which a substring of the name matches this string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to
        /// 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>Restrict the query to call sets within the given variant sets. At least one ID must be
        /// provided.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetIds")]
        public virtual System.Collections.Generic.IList<string> VariantSetIds { get; set; } 

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

    /// <summary>The call set search response.</summary>
    public class SearchCallSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of matching call sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSets")]
        public virtual System.Collections.Generic.IList<CallSet> CallSets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

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

    /// <summary>The read group set search request.</summary>
    public class SearchReadGroupSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Restricts this query to read group sets within the given datasets. At least one ID must be
        /// provided.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetIds")]
        public virtual System.Collections.Generic.IList<string> DatasetIds { get; set; } 

        /// <summary>Only return read group sets for which a substring of the name matches this string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 256. The
        /// maximum value is 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

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

    /// <summary>The read group set search response.</summary>
    public class SearchReadGroupSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of matching read group sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSets")]
        public virtual System.Collections.Generic.IList<ReadGroupSet> ReadGroupSets { get; set; } 

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

    /// <summary>The read search request.</summary>
    public class SearchReadsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end position of the range on the reference, 0-based exclusive. If specified, `referenceName`
        /// must also be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 256. The
        /// maximum value is 2048.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>The IDs of the read groups within which to search for reads. All specified read groups must belong
        /// to the same read group sets. Must specify one of `readGroupSetIds` or `readGroupIds`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupIds")]
        public virtual System.Collections.Generic.IList<string> ReadGroupIds { get; set; } 

        /// <summary>The IDs of the read groups sets within which to search for reads. All specified read group sets
        /// must be aligned against a common set of reference sequences; this defines the genomic coordinates for the
        /// query. Must specify one of `readGroupSetIds` or `readGroupIds`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetIds")]
        public virtual System.Collections.Generic.IList<string> ReadGroupSetIds { get; set; } 

        /// <summary>The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to `*`, only unmapped reads
        /// are returned. If unspecified, all reads (mapped and unmapped) are returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive. If specified, `referenceName`
        /// must also be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

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

    /// <summary>The read search response.</summary>
    public class SearchReadsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of matching alignments sorted by mapped genomic coordinate, if any, ascending in position
        /// within the same reference. Unmapped reads, which have no position, are returned contiguously and are sorted
        /// in ascending lexicographic order by fragment name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignments")]
        public virtual System.Collections.Generic.IList<Read> Alignments { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

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

    public class SearchReferenceSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If present, return reference sets for which a prefix of any of sourceAccessions match any of these
        /// strings. Accession numbers typically have a main number and a version, for example `NC_000001.11`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessions")]
        public virtual System.Collections.Generic.IList<string> Accessions { get; set; } 

        /// <summary>If present, return reference sets for which a substring of their `assemblyId` matches this string
        /// (case insensitive).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("assemblyId")]
        public virtual string AssemblyId { get; set; } 

        /// <summary>If present, return reference sets for which the md5checksum matches exactly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksums")]
        public virtual System.Collections.Generic.IList<string> Md5checksums { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 1024. The
        /// maximum value is 4096.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

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

    public class SearchReferenceSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The matching references sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSets")]
        public virtual System.Collections.Generic.IList<ReferenceSet> ReferenceSets { get; set; } 

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

    public class SearchReferencesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If present, return references for which a prefix of any of sourceAccessions match any of these
        /// strings. Accession numbers typically have a main number and a version, for example
        /// `GCF_000001405.26`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessions")]
        public virtual System.Collections.Generic.IList<string> Accessions { get; set; } 

        /// <summary>If present, return references for which the md5checksum matches exactly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksums")]
        public virtual System.Collections.Generic.IList<string> Md5checksums { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 1024. The
        /// maximum value is 4096.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>If present, return only references which belong to this reference set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

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

    public class SearchReferencesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The matching references.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("references")]
        public virtual System.Collections.Generic.IList<Reference> References { get; set; } 

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

    /// <summary>The search variant sets request.</summary>
    public class SearchVariantSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Exactly one dataset ID must be provided here. Only variant sets which belong to this dataset will
        /// be returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetIds")]
        public virtual System.Collections.Generic.IList<string> DatasetIds { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to
        /// 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

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

    /// <summary>The search variant sets response.</summary>
    public class SearchVariantSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The variant sets belonging to the requested dataset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSets")]
        public virtual System.Collections.Generic.IList<VariantSet> VariantSets { get; set; } 

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

    /// <summary>The variant search request.</summary>
    public class SearchVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Only return variant calls which belong to call sets with these ids. Leaving this blank returns all
        /// variant calls. If a variant has no calls belonging to any of these call sets, it won't be returned at all.
        /// Currently, variants with no calls from any call set will never be returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

        /// <summary>The end of the window, 0-based exclusive. If unspecified or 0, defaults to the length of the
        /// reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The maximum number of calls to return in a single page. Note that this limit may be exceeded in the
        /// event that a matching variant contains more calls than the requested maximum. If unspecified, defaults to
        /// 5000. The maximum value is 10000.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxCalls")]
        public virtual System.Nullable<int> MaxCalls { get; set; } 

        /// <summary>The maximum number of variants to return in a single page. If unspecified, defaults to 5000. The
        /// maximum value is 10000.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>Required. Only return variants in this reference sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The beginning of the window (0-based, inclusive) for which overlapping variants should be returned.
        /// If unspecified, defaults to 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>Only return variants which have exactly this name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantName")]
        public virtual string VariantName { get; set; } 

        /// <summary>At most one variant set ID must be provided. Only variants from this variant set will be returned.
        /// If omitted, a call set id must be included in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetIds")]
        public virtual System.Collections.Generic.IList<string> VariantSetIds { get; set; } 

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

    /// <summary>The variant search response.</summary>
    public class SearchVariantsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of matching Variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variants")]
        public virtual System.Collections.Generic.IList<Variant> Variants { get; set; } 

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

    /// <summary>Request message for `SetIamPolicy` method.</summary>
    public class SetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>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 Cloud Platform services (such as Projects)
        /// might reject them.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("policy")]
        public virtual Policy Policy { get; set; } 

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

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be: - Simple to use and understand for most users - Flexible enough to meet unexpected needs #
    /// Overview The `Status` message contains three pieces of data: error code, error message, and error details. The
    /// error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The
    /// error message should be a developer-facing English message that helps developers *understand* and *resolve* the
    /// error. If a localized user-facing error message is needed, put the localized message in the error details or
    /// localize it in the client. The optional error details may contain arbitrary information about the error. There
    /// is a predefined set of error detail types in the package `google.rpc` which can be used for common error
    /// conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is
    /// not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and
    /// different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions
    /// in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message
    /// can be used in a variety of environments, either with or without APIs, to provide a consistent developer
    /// experience across different environments. Example uses of this error model include: - Partial errors. If a
    /// service needs to return partial errors to the client, it may embed the `Status` in the normal response to
    /// indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a
    /// `Status` message for error reporting purpose. - Batch operations. If a client uses batch request and batch
    /// response, the `Status` message should be used directly inside batch response, one for each error sub-response. -
    /// Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message. - Logging. If some API errors are
    /// stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy
    /// reasons.</summary>
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

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

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

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

    /// <summary>The stream reads request.</summary>
    public class StreamReadsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end position of the range on the reference, 0-based exclusive. If specified, `referenceName`
        /// must also be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The Google Developers Console project ID or number which will be billed for this access. The caller
        /// must have WRITE access to this project. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The ID of the read group set from which to stream reads.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetId")]
        public virtual string ReadGroupSetId { get; set; } 

        /// <summary>The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to *, only unmapped reads
        /// are returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>Restricts results to a shard containing approximately `1/totalShards` of the normal response
        /// payload for this query. Results from a sharded request are disjoint from those returned by all queries which
        /// differ only in their shard parameter. A shard may yield 0 results; this is especially likely for large
        /// values of `totalShards`. Valid values are `[0, totalShards)`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shard")]
        public virtual System.Nullable<int> Shard { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive. If specified, `referenceName`
        /// must also be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>Specifying `totalShards` causes a disjoint subset of the normal response payload to be returned for
        /// each query with a unique `shard` parameter specified. A best effort is made to yield equally sized shards.
        /// Sharding can be used to distribute processing amongst workers, where each worker is assigned a unique
        /// `shard` number and all workers specify the same `totalShards` number. The union of reads returned for all
        /// sharded queries `[0, totalShards)` is equal to those returned by a single unsharded query. Queries for
        /// different values of `totalShards` with common divisors will share shard boundaries. For example, streaming
        /// `shard` 2 of 5 `totalShards` yields the same results as streaming `shard`s 4 and 5 of 10 `totalShards`. This
        /// property can be leveraged for adaptive retries.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalShards")]
        public virtual System.Nullable<int> TotalShards { get; set; } 

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

    public class StreamReadsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("alignments")]
        public virtual System.Collections.Generic.IList<Read> Alignments { get; set; } 

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

    /// <summary>The stream variants request.</summary>
    public class StreamVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Only return variant calls which belong to call sets with these IDs. Leaving this blank returns all
        /// variant calls.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

        /// <summary>The end of the window (0-based, exclusive) for which overlapping variants should be
        /// returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The Google Developers Console project ID or number which will be billed for this access. The caller
        /// must have WRITE access to this project. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>Required. Only return variants in this reference sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The beginning of the window (0-based, inclusive) for which overlapping variants should be
        /// returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The variant set ID from which to stream variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

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

    public class StreamVariantsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("variants")]
        public virtual System.Collections.Generic.IList<Variant> Variants { get; set; } 

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

    /// <summary>Request message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>REQUIRED: The set of permissions to check for the 'resource'. Permissions with wildcards (such as
        /// '*' or 'storage.*') are not allowed. Allowed permissions are: * `genomics.datasets.create` *
        /// `genomics.datasets.delete` * `genomics.datasets.get` * `genomics.datasets.list` * `genomics.datasets.update`
        /// * `genomics.datasets.getIamPolicy` * `genomics.datasets.setIamPolicy`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

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

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

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

    public class UndeleteDatasetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A variant represents a change in DNA sequence relative to a reference sequence. For example, a variant
    /// could represent a SNP or an insertion. Variants belong to a variant set. For more genomics resource definitions,
    /// see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Each of
    /// the calls on a variant represent a determination of genotype with respect to that variant. For example, a call
    /// might assign probability of 0.32 to the occurrence of a SNP named rs1234 in a sample named NA12345. A call
    /// belongs to a call set, which contains related calls typically from one sample.</summary>
    public class Variant : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The bases that appear instead of the reference bases.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alternateBases")]
        public virtual System.Collections.Generic.IList<string> AlternateBases { get; set; } 

        /// <summary>The variant calls for this particular variant. Each one represents the determination of genotype
        /// with respect to this variant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("calls")]
        public virtual System.Collections.Generic.IList<VariantCall> Calls { get; set; } 

        /// <summary>The date this variant was created, in milliseconds from the epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("created")]
        public virtual System.Nullable<long> Created { get; set; } 

        /// <summary>The end position (0-based) of this variant. This corresponds to the first base after the last base
        /// in the reference allele. So, the length of the reference allele is (end - start). This is useful for
        /// variants that don't explicitly give alternate bases, for example large deletions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>A list of filters (normally quality filters) this variant has failed. `PASS` indicates this variant
        /// has passed all filters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual System.Collections.Generic.IList<string> Filter { get; set; } 

        /// <summary>The server-generated variant ID, unique across all variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional variant information. This must be of the form map (string key mapping to a list
        /// of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>Names for the variant, for example a RefSNP ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("names")]
        public virtual System.Collections.Generic.IList<string> Names { get; set; } 

        /// <summary>A measure of how likely this variant is to be real. A higher value is better.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quality")]
        public virtual System.Nullable<double> Quality { get; set; } 

        /// <summary>The reference bases for this variant. They start at the given position.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceBases")]
        public virtual string ReferenceBases { get; set; } 

        /// <summary>The reference on which this variant occurs. (such as `chr20` or `X`)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The position at which this variant occurs (0-based). This corresponds to the first base of the
        /// string of reference bases.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ID of the variant set this variant belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

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

    /// <summary>A call represents the determination of genotype with respect to a particular variant. It may include
    /// associated information such as quality and phasing. For example, a call might assign a probability of 0.32 to
    /// the occurrence of a SNP named rs1234 in a call set with the name NA12345.</summary>
    public class VariantCall : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the call set this variant call belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetId")]
        public virtual string CallSetId { get; set; } 

        /// <summary>The name of the call set this variant call belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetName")]
        public virtual string CallSetName { get; set; } 

        /// <summary>The genotype of this variant call. Each value represents either the value of the `referenceBases`
        /// field or a 1-based index into `alternateBases`. If a variant had a `referenceBases` value of `T` and an
        /// `alternateBases` value of `["A", "C"]`, and the `genotype` was `[2, 1]`, that would mean the call
        /// represented the heterozygous value `CA` for this variant. If the `genotype` was instead `[0, 1]`, the
        /// represented value would be `TA`. Ordering of the genotype values is important if the `phaseset` is present.
        /// If a genotype is not called (that is, a `.` is present in the GT string) -1 is returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("genotype")]
        public virtual System.Collections.Generic.IList<System.Nullable<int>> Genotype { get; set; } 

        /// <summary>The genotype likelihoods for this variant call. Each array entry represents how likely a specific
        /// genotype is for this call. The value ordering is defined by the GL tag in the VCF spec. If Phred-scaled
        /// genotype likelihood scores (PL) are available and log10(P) genotype likelihood scores (GL) are not, PL
        /// scores are converted to GL scores. If both are available, PL scores are stored in `info`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("genotypeLikelihood")]
        public virtual System.Collections.Generic.IList<System.Nullable<double>> GenotypeLikelihood { get; set; } 

        /// <summary>A map of additional variant call information. This must be of the form map (string key mapping to a
        /// list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>If this field is present, this variant call's genotype ordering implies the phase of the bases and
        /// is consistent with any other variant calls in the same reference sequence which have the same phaseset
        /// value. When importing data from VCF, if the genotype data was phased but no phase set was specified this
        /// field will be set to `*`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phaseset")]
        public virtual string Phaseset { get; set; } 

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

    /// <summary>A variant set is a collection of call sets and variants. It contains summary statistics of those
    /// contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of
    /// Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
    public class VariantSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this variant set belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>The server-generated variant set ID, unique across all variant sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The metadata associated with this variant set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IList<VariantSetMetadata> Metadata { get; set; } 

        /// <summary>A list of all references used by the variants in a variant set with associated coordinate upper
        /// bounds for each one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceBounds")]
        public virtual System.Collections.Generic.IList<ReferenceBound> ReferenceBounds { get; set; } 

        /// <summary>The reference set to which the variant set is mapped. The reference set describes the alignment
        /// provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data.
        /// The reference set's reference names are a superset of those found in the `referenceBounds`. For example,
        /// given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference
        /// 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates
        /// all possible references: '1', '2', 'X', 'Y', 'MT', etc.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

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

    /// <summary>Metadata describes a single piece of variant call metadata. These data include a top level key and
    /// either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually
    /// exclusive.</summary>
    public class VariantSetMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A textual description of this metadata.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with
        /// identical id and key fields are considered equivalent.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to
        /// a list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The top-level key.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        /// <summary>The number of values that can be included in a field described by this metadata.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("number")]
        public virtual string Number { get; set; } 

        /// <summary>The type of data. Possible types include: Integer, Float, Flag, Character, and String.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The value field for simple metadata</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

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