/* SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ /* * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. * * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you 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. */ using System; using System.Diagnostics.CodeAnalysis; using System.Threading; using System.Threading.Tasks; using OpenSearch.Net.Extensions; namespace OpenSearch.Net { /// /// Low level client that exposes all of OpenSearch API endpoints but leaves you in charge of building request and handling the response /// // ReSharper disable once RedundantExtendsListEntry public partial class OpenSearchLowLevelClient : IOpenSearchLowLevelClient { /// Instantiate a new low level OpenSearch client to http://localhost:9200 [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] public OpenSearchLowLevelClient() : this(new Transport(new ConnectionConfiguration())) { } /// Instantiate a new low level OpenSearch client using the specified settings [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] public OpenSearchLowLevelClient(IConnectionConfigurationValues settings) : this( new Transport(settings ?? new ConnectionConfiguration())) { } /// /// Sets up the client to communicate to OpenSearch Cloud using , /// documentation for more information on how to obtain your Cloud Id /// If you want more control use the constructor and pass an instance of /// that takes in its constructor as well /// public OpenSearchLowLevelClient(string cloudId, BasicAuthenticationCredentials credentials) : this(new ConnectionConfiguration(cloudId, credentials)) { } /// /// Sets up the client to communicate to OpenSearch Cloud using , /// documentation for more information on how to obtain your Cloud Id /// If you want more control use the constructor and pass an instance of /// that takes in its constructor as well /// public OpenSearchLowLevelClient(string cloudId, ApiKeyAuthenticationCredentials credentials) : this(new ConnectionConfiguration(cloudId, credentials)) { } /// /// Instantiate a new low level OpenSearch client explicitly specifying a custom transport setup /// public OpenSearchLowLevelClient(ITransport transport) { transport.ThrowIfNull(nameof(transport)); transport.Settings.ThrowIfNull(nameof(transport.Settings)); transport.Settings.RequestResponseSerializer.ThrowIfNull(nameof(transport.Settings.RequestResponseSerializer)); Transport = transport; UrlFormatter = Transport.Settings.UrlFormatter; SetupNamespaces(); SetupGeneratedNamespaces(); } partial void SetupNamespaces(); partial void SetupGeneratedNamespaces(); public IOpenSearchSerializer Serializer => Transport.Settings.RequestResponseSerializer; public IConnectionConfigurationValues Settings => Transport.Settings; protected ITransport Transport { get; set; } private OpenSearchUrlFormatter UrlFormatter { get; } public TResponse DoRequest(HttpMethod method, string path, PostData data = null, IRequestParameters requestParameters = null) where TResponse : class, IOpenSearchResponse, new() => Transport.Request(method, path, data, requestParameters); public Task DoRequestAsync(HttpMethod method, string path, CancellationToken cancellationToken, PostData data = null, IRequestParameters requestParameters = null ) where TResponse : class, IOpenSearchResponse, new() => Transport.RequestAsync(method, path, cancellationToken, data, requestParameters); protected internal string Url(FormattableString formattable) => formattable.ToString(UrlFormatter); protected internal TRequestParams RequestParams(TRequestParams requestParams, string contentType = null, string accept = null) where TRequestParams : class, IRequestParameters, new() { if (contentType.IsNullOrEmpty() && accept.IsNullOrEmpty()) return requestParams; requestParams ??= new TRequestParams(); requestParams.RequestConfiguration ??= new RequestConfiguration(); if (!contentType.IsNullOrEmpty() && requestParams.RequestConfiguration.ContentType.IsNullOrEmpty()) requestParams.RequestConfiguration.ContentType = contentType; if (!accept.IsNullOrEmpty() && requestParams.RequestConfiguration.Accept.IsNullOrEmpty()) requestParams.RequestConfiguration.Accept = accept; return requestParams; } } }