/* 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.Collections.Generic; using System.Collections.ObjectModel; using System.Net.NetworkInformation; using OpenSearch.Net.Diagnostics; namespace OpenSearch.Net { /// /// A response from OpenSearch including details about the request/response life cycle /// public abstract class OpenSearchResponseBase : IApiCallDetails, IOpenSearchResponse { /// public IApiCallDetails ApiCall { get; set; } /// public ReadOnlyDictionary TcpStats { get => ApiCall.TcpStats; set => ApiCall.TcpStats = value; } /// public string DebugInformation => ApiCall.DebugInformation; /// public HttpMethod HttpMethod => ApiCall.HttpMethod; /// public List AuditTrail { get => ApiCall.AuditTrail; set => ApiCall.AuditTrail = value; } /// public ReadOnlyDictionary ThreadPoolStats { get => ApiCall.ThreadPoolStats; set => ApiCall.ThreadPoolStats = value; } /// public IEnumerable DeprecationWarnings => ApiCall.DeprecationWarnings; /// public bool SuccessOrKnownError => ApiCall.SuccessOrKnownError; /// public int? HttpStatusCode => ApiCall.HttpStatusCode; /// public bool Success => ApiCall.Success; /// public Exception OriginalException => ApiCall.OriginalException; /// public string ResponseMimeType => ApiCall.ResponseMimeType; /// public Uri Uri => ApiCall.Uri; /// public IConnectionConfigurationValues ConnectionConfiguration => ApiCall.ConnectionConfiguration; /// public byte[] ResponseBodyInBytes => ApiCall.ResponseBodyInBytes; /// public byte[] RequestBodyInBytes => ApiCall.RequestBodyInBytes; bool IOpenSearchResponse.TryGetServerErrorReason(out string reason) => TryGetServerErrorReason(out reason); public virtual bool TryGetServerError(out ServerError serverError) { serverError = null; var bytes = ApiCall.ResponseBodyInBytes; if (bytes == null || ResponseMimeType != RequestData.MimeType) return false; using(var stream = ConnectionConfiguration.MemoryStreamFactory.Create(bytes)) return ServerError.TryCreate(stream, out serverError); } protected virtual bool TryGetServerErrorReason(out string reason) { reason = null; if (!TryGetServerError(out var serverError)) return false; reason = serverError?.Error?.ToString(); return !string.IsNullOrEmpty(reason); } public override string ToString() => ApiCall.ToString(); } /// /// A response from OpenSearch including details about the request/response life cycle. Base class for the built in low level response /// types, , , and /// public abstract class OpenSearchResponse : OpenSearchResponseBase { public T Body { get; protected internal set; } } }