/// <inheritdoc/>
		public Task<IIndicesOperationResponse> PutIndexTemplateAsync(Name name, Func<PutIndexTemplateDescriptor, IPutIndexTemplateRequest> selector) =>
			this.PutIndexTemplateAsync(selector.InvokeOrDefault(new PutIndexTemplateDescriptor(name)));
		/// <inheritdoc/>
		public Task<IDisableUserResponse> DisableUserAsync(Name username, Func<DisableUserDescriptor, IDisableUserRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
			this.DisableUserAsync(selector.InvokeOrDefault(new DisableUserDescriptor()), cancellationToken);
		/// <inheritdoc/>
		public Task<IPutUserResponse> PutUserAsync(Name username, Func<PutUserDescriptor, IPutUserRequest> selector = null) =>
			this.PutUserAsync(selector.InvokeOrDefault(new PutUserDescriptor(username)));
		/// <inheritdoc/>
		public Task<ISnapshotResponse> SnapshotAsync(Name repository, Name snapshotName, Func<SnapshotDescriptor, ISnapshotRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
			this.SnapshotAsync(selector.InvokeOrDefault(new SnapshotDescriptor(repository, snapshotName)), cancellationToken);
		/// <inheritdoc/>
		public Task<IDeleteRoleResponse> DeleteRoleAsync(Name role, Func<DeleteRoleDescriptor, IDeleteRoleRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
			this.DeleteRoleAsync(selector.InvokeOrDefault(new DeleteRoleDescriptor(role)), cancellationToken);
		/// <inheritdoc/>
		public IAcknowledgedResponse DeleteSnapshot(Name repository, Name snapshotName, Func<DeleteSnapshotDescriptor, IDeleteSnapshotRequest> selector = null) =>
			this.DeleteSnapshot(selector.InvokeOrDefault(new DeleteSnapshotDescriptor(repository, snapshotName)));
		/// <inheritdoc/>
		public Task<IExistsResponse> IndexTemplateExistsAsync(Name template, Func<IndexTemplateExistsDescriptor, IIndexTemplateExistsRequest> selector = null) => 
			this.IndexTemplateExistsAsync(selector.InvokeOrDefault(new IndexTemplateExistsDescriptor(template)));
		/// <inheritdoc/>
		public Task<IPutAliasResponse> PutAliasAsync(
			Indices indices,
			Name alias,
			Func<PutAliasDescriptor, IPutAliasRequest> selector = null,
			CancellationToken cancellationToken = default(CancellationToken)
		) => this.PutAliasAsync(selector.InvokeOrDefault(new PutAliasDescriptor(indices, alias)), cancellationToken);
		/// <inheritdoc/>
		public Task<IPutRoleResponse> PutRoleAsync(Name role, Func<PutRoleDescriptor, IPutRoleRequest> selector = null) =>
			this.PutRoleAsync(selector.InvokeOrDefault(new PutRoleDescriptor(role)));
		/// <inheritdoc/>
		public IPutIndexTemplateResponse PutIndexTemplate(Name name, Func<PutIndexTemplateDescriptor, IPutIndexTemplateRequest> selector) =>
			this.PutIndexTemplate(selector.InvokeOrDefault(new PutIndexTemplateDescriptor(name)));
		/// <inheritdoc/>
		public Task<IPutIndexTemplateResponse> PutIndexTemplateAsync(
			Name name,
			Func<PutIndexTemplateDescriptor, IPutIndexTemplateRequest> selector,
			CancellationToken cancellationToken = default(CancellationToken)
		) => this.PutIndexTemplateAsync(selector.InvokeOrDefault(new PutIndexTemplateDescriptor(name)), cancellationToken);
		/// <inheritdoc/>
		public Task<IGetScriptResponse> GetScriptAsync(Name language, Id id, Func<GetScriptDescriptor, IGetScriptRequest> selector = null) => 
			this.GetScriptAsync(selector.InvokeOrDefault(new GetScriptDescriptor(language, id)));
		/// <inheritdoc/>
		public Task<IVerifyRepositoryResponse> VerifyRepositoryAsync(Name repository, Func<VerifyRepositoryDescriptor, IVerifyRepositoryRequest> selector = null) => 
			this.VerifyRepositoryAsync(selector.InvokeOrDefault(new VerifyRepositoryDescriptor(repository)));
		/// <inheritdoc/>
		public Task<IAcknowledgedResponse> DeleteScriptAsync(Name language, Id id, Func<DeleteScriptDescriptor, IDeleteScriptRequest> selector = null) => 
			this.DeleteScriptAsync(selector.InvokeOrDefault(new DeleteScriptDescriptor(language, id)));
		public Task<IAcknowledgedResponse> PutScriptAsync(Name language, Id id, Func<PutScriptDescriptor, IPutScriptRequest> selector) => 
			this.PutScriptAsync(selector?.Invoke(new PutScriptDescriptor(language, id)));
		/// <inheritdoc/>
		public IGetSnapshotResponse GetSnapshot(Name repository, Names snapshots, Func<GetSnapshotDescriptor, IGetSnapshotRequest> selector = null) =>
			this.GetSnapshot(selector.InvokeOrDefault(new GetSnapshotDescriptor(repository, snapshots)));
		/// <inheritdoc/>
		public Task<IAcknowledgedResponse> CreateRepositoryAsync(Name repository, Func<CreateRepositoryDescriptor, ICreateRepositoryRequest> selector) => 
			this.CreateRepositoryAsync(selector?.Invoke(new CreateRepositoryDescriptor(repository)));
		/// <inheritdoc/>
		public Task<IGetSnapshotResponse> GetSnapshotAsync(Name repository, Names snapshots, Func<GetSnapshotDescriptor, IGetSnapshotRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
			this.GetSnapshotAsync(selector.InvokeOrDefault(new GetSnapshotDescriptor(repository, snapshots)), cancellationToken);
		/// <inheritdoc/>
		public Task<IDeleteSnapshotResponse> DeleteSnapshotAsync(Name repository, Name snapshotName, Func<DeleteSnapshotDescriptor, IDeleteSnapshotRequest> selector = null) => 
			this.DeleteSnapshotAsync(selector.InvokeOrDefault(new DeleteSnapshotDescriptor(repository, snapshotName)));
		public IPutScriptResponse PutScript(Name language, Id id, Func<PutScriptDescriptor, IPutScriptRequest> selector) =>
			this.PutScript(selector?.Invoke(new PutScriptDescriptor(language, id)));
		/// <inheritdoc/>
		public ISnapshotResponse Snapshot(Name repository, Name snapshotName, Func<SnapshotDescriptor, ISnapshotRequest> selector = null) =>
			this.Snapshot(selector.InvokeOrDefault(new SnapshotDescriptor(repository, snapshotName)));
		public Task<IPutScriptResponse> PutScriptAsync(Name language, Id id, Func<PutScriptDescriptor, IPutScriptRequest> selector, CancellationToken cancellationToken = default(CancellationToken)) =>
			this.PutScriptAsync(selector?.Invoke(new PutScriptDescriptor(language, id)), cancellationToken);
		/// <inheritdoc/>
		public IDeleteRoleResponse DeleteRole(Name role, Func<DeleteRoleDescriptor, IDeleteRoleRequest> selector = null) =>
			this.DeleteRole(selector.InvokeOrDefault(new DeleteRoleDescriptor(role)));
		/// <inheritdoc/>
		public IRestoreResponse Restore(Name repository, Name snapshotName, Func<RestoreDescriptor, IRestoreRequest> selector = null) =>
			this.Restore(selector.InvokeOrDefault(new RestoreDescriptor(repository, snapshotName)));
		/// <inheritdoc/>
		public IDisableUserResponse DisableUser(Name username, Func<DisableUserDescriptor, IDisableUserRequest> selector = null) =>
			this.DisableUser(selector.InvokeOrDefault(new DisableUserDescriptor()));
		/// <inheritdoc/>
		public Task<IAcknowledgedResponse> PutWarmerAsync(Name name, Func<PutWarmerDescriptor, IPutWarmerRequest> selector) => 
			this.PutWarmerAsync(selector?.Invoke(new PutWarmerDescriptor(name)));
		/// <inheritdoc/>
		public Task<IPutUserResponse> PutUserAsync(Name username, Func<PutUserDescriptor, IPutUserRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
			this.PutUserAsync(selector.InvokeOrDefault(new PutUserDescriptor(username)), cancellationToken);
		/// <inheritdoc/>
		public Task<IDeleteIndexTemplateResponse> DeleteIndexTemplateAsync(Name name, Func<DeleteIndexTemplateDescriptor, IDeleteIndexTemplateRequest> selector = null) =>
			this.DeleteIndexTemplateAsync(selector.InvokeOrDefault(new DeleteIndexTemplateDescriptor(name)));
		/// <inheritdoc/>
		public Task<IPutAliasResponse> PutAliasAsync(Indices indices, Name alias, Func<PutAliasDescriptor, IPutAliasRequest> selector = null) =>
			this.PutAliasAsync(selector.InvokeOrDefault(new PutAliasDescriptor(indices, alias)));
		/// <inheritdoc/>
		public IDeleteScriptResponse DeleteScript(Name language, Id id, Func<DeleteScriptDescriptor, IDeleteScriptRequest> selector = null) =>
			this.DeleteScript(selector.InvokeOrDefault(new DeleteScriptDescriptor(language, id)));