internal HttpMessage CreateCreateRequest(SearchAlias @alias)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;

            request.Method = RequestMethod.Post;
            var uri = new RawRequestUriBuilder();

            uri.AppendRaw(_endpoint, false);
            uri.AppendPath("/aliases", false);
            uri.AppendQuery("api-version", _apiVersion, true);
            request.Uri = uri;
            request.Headers.Add("Accept", "application/json; odata.metadata=minimal");
            request.Headers.Add("Content-Type", "application/json");
            var content = new Utf8JsonRequestContent();

            content.JsonWriter.WriteObjectValue(@alias);
            request.Content = content;
            return(message);
        }
        public async Task <Response <SearchAlias> > CreateAsync(SearchAlias @alias, CancellationToken cancellationToken = default)
        {
            if (@alias == null)
            {
                throw new ArgumentNullException(nameof(@alias));
            }

            using var message = CreateCreateRequest(@alias);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 201:
            {
                SearchAlias value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                value = SearchAlias.DeserializeSearchAlias(document.RootElement);
                return(Response.FromValue(value, message.Response));
            }
 /// <summary>
 /// Creates a new search alias or updates an alias if it already exists.
 /// </summary>
 /// <param name="aliasName">The name of the alias to create or update.</param>
 /// <param name="alias">The definition of the alias to create or update.</param>
 /// <param name="onlyIfUnchanged">
 /// True to throw a <see cref="RequestFailedException"/> if the <see cref="SearchAlias.ETag"/> does not match the current alias version;
 /// otherwise, the current version will be overwritten.
 /// </param>
 /// <param name="cancellationToken">Optional <see cref="CancellationToken"/> to propagate notifications that the operation should be canceled.</param>
 /// <returns><see cref="SearchAlias"/> defined by <c>aliasName</c>.</returns>
 public virtual async Task <Response <SearchAlias> > CreateOrUpdateAliasAsync(string aliasName, SearchAlias alias, bool onlyIfUnchanged = false, CancellationToken cancellationToken = default)
 {
     using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(SearchIndexClient)}.{nameof(CreateOrUpdateAlias)}");
     scope.Start();
     try
     {
         return(await AliasesClient.CreateOrUpdateAsync(aliasName, alias, onlyIfUnchanged?alias.ETag?.ToString() : null, null, cancellationToken).ConfigureAwait(false));
     }
     catch (Exception ex)
     {
         scope.Failed(ex);
         throw;
     }
 }