Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added unmapped endpoints #2894

Merged
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6295,28 +6295,28 @@ public class GraphExploreRequestParameters : FluentRequestParameters<GraphExplor
///http://www.elastic.co/guide/en/migration/current/migration-api-deprecation.html
///</pre>
///</summary>
public class XpackDeprecationInfoRequestParameters : FluentRequestParameters<XpackDeprecationInfoRequestParameters>
public class DeprecationInfoRequestParameters : FluentRequestParameters<DeprecationInfoRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;

///<summary>Pretty format the returned JSON response.</summary>
public XpackDeprecationInfoRequestParameters Pretty(bool pretty) => this.AddQueryString("pretty", pretty);
public DeprecationInfoRequestParameters Pretty(bool pretty) => this.AddQueryString("pretty", pretty);


///<summary>Return human readable values for statistics.</summary>
public XpackDeprecationInfoRequestParameters Human(bool human) => this.AddQueryString("human", human);
public DeprecationInfoRequestParameters Human(bool human) => this.AddQueryString("human", human);


///<summary>Include the stack trace of returned errors.</summary>
public XpackDeprecationInfoRequestParameters ErrorTrace(bool error_trace) => this.AddQueryString("error_trace", error_trace);
public DeprecationInfoRequestParameters ErrorTrace(bool error_trace) => this.AddQueryString("error_trace", error_trace);


///<summary>The URL-encoded request definition. Useful for libraries that do not accept a request body for non-POST requests.</summary>
public XpackDeprecationInfoRequestParameters Source(string source) => this.AddQueryString("source", source);
public DeprecationInfoRequestParameters Source(string source) => this.AddQueryString("source", source);


///<summary>A comma-separated list of filters used to reduce the respone.</summary>
public XpackDeprecationInfoRequestParameters FilterPath(params string[] filter_path) => this.AddQueryString("filter_path", filter_path);
public DeprecationInfoRequestParameters FilterPath(params string[] filter_path) => this.AddQueryString("filter_path", filter_path);

}

Expand Down
8 changes: 4 additions & 4 deletions src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7794,7 +7794,7 @@ public ElasticsearchResponse<T> XpackGraphExplore<T>(string index, string type,
///<para>See also: http://www.elastic.co/guide/en/migration/current/migration-api-deprecation.html </para>
///</summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public ElasticsearchResponse<T> XpackDeprecationInfo<T>(Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null)
public ElasticsearchResponse<T> XpackDeprecationInfo<T>(Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null)
where T : class => this.DoRequest<T>(GET, Url($"_xpack/migration/deprecations"), null, _params(requestParameters));

///<summary>Represents a GET on /_xpack/migration/deprecations
Expand All @@ -7807,7 +7807,7 @@ public ElasticsearchResponse<T> XpackDeprecationInfo<T>(Func<XpackDeprecationInf
///<para>See also: http://www.elastic.co/guide/en/migration/current/migration-api-deprecation.html </para>
///</summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken))
public Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken))
where T : class => this.DoRequestAsync<T>(GET, Url($"_xpack/migration/deprecations"), cancellationToken, null, _params(requestParameters));

///<summary>Represents a GET on /{index}/_xpack/migration/deprecations
Expand All @@ -7821,7 +7821,7 @@ public ElasticsearchResponse<T> XpackDeprecationInfo<T>(Func<XpackDeprecationInf
///</summary>
///<param name="index">Index pattern</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public ElasticsearchResponse<T> XpackDeprecationInfo<T>(string index, Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null)
public ElasticsearchResponse<T> XpackDeprecationInfo<T>(string index, Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null)
where T : class => this.DoRequest<T>(GET, Url($"{index.NotNull("index")}/_xpack/migration/deprecations"), null, _params(requestParameters));

///<summary>Represents a GET on /{index}/_xpack/migration/deprecations
Expand All @@ -7835,7 +7835,7 @@ public ElasticsearchResponse<T> XpackDeprecationInfo<T>(string index, Func<Xpack
///</summary>
///<param name="index">Index pattern</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(string index, Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken))
public Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(string index, Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken))
where T : class => this.DoRequestAsync<T>(GET, Url($"{index.NotNull("index")}/_xpack/migration/deprecations"), cancellationToken, null, _params(requestParameters));

///<summary>Represents a GET on /_xpack
Expand Down
8 changes: 4 additions & 4 deletions src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7257,7 +7257,7 @@ public partial interface IElasticLowLevelClient
///<para>See also: http://www.elastic.co/guide/en/migration/current/migration-api-deprecation.html </para>
///</summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
ElasticsearchResponse<T> XpackDeprecationInfo<T>(Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null) where T : class;
ElasticsearchResponse<T> XpackDeprecationInfo<T>(Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null) where T : class;

///<summary>Represents a GET on /_xpack/migration/deprecations
///<para></para>Returns: A task of ElasticsearchResponse&lt;T&gt; where the behaviour depends on the type of T:
Expand All @@ -7269,7 +7269,7 @@ public partial interface IElasticLowLevelClient
///<para>See also: http://www.elastic.co/guide/en/migration/current/migration-api-deprecation.html </para>
///</summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken)) where T : class;
Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken)) where T : class;

///<summary>Represents a GET on /{index}/_xpack/migration/deprecations
///<para></para>Returns: ElasticsearchResponse&lt;T&gt; where the behavior depends on the type of T:
Expand All @@ -7282,7 +7282,7 @@ public partial interface IElasticLowLevelClient
///</summary>
///<param name="index">Index pattern</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
ElasticsearchResponse<T> XpackDeprecationInfo<T>(string index, Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null) where T : class;
ElasticsearchResponse<T> XpackDeprecationInfo<T>(string index, Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null) where T : class;

///<summary>Represents a GET on /{index}/_xpack/migration/deprecations
///<para></para>Returns: A task of ElasticsearchResponse&lt;T&gt; where the behaviour depends on the type of T:
Expand All @@ -7295,7 +7295,7 @@ public partial interface IElasticLowLevelClient
///</summary>
///<param name="index">Index pattern</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(string index, Func<XpackDeprecationInfoRequestParameters, XpackDeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken)) where T : class;
Task<ElasticsearchResponse<T>> XpackDeprecationInfoAsync<T>(string index, Func<DeprecationInfoRequestParameters, DeprecationInfoRequestParameters> requestParameters = null, CancellationToken cancellationToken = default(CancellationToken)) where T : class;

///<summary>Represents a GET on /_xpack
///<para></para>Returns: ElasticsearchResponse&lt;T&gt; where the behavior depends on the type of T:
Expand Down
55 changes: 55 additions & 0 deletions src/Nest/Cluster/NodesUsage/ElasticClient-NodesUsage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Elasticsearch.Net;

namespace Nest
{
using System.Threading;
using NodesHotThreadConverter = Func<IApiCallDetails, Stream, NodesHotThreadsResponse>;

public partial interface IElasticClient
{
/// <summary>
/// The cluster nodes usage API allows to retrieve information on the usage of features for each node.
/// <para> </para>https://www.elastic.co/guide/en/elasticsearch/reference/master/cluster-nodes-usage.html
/// </summary>
/// <param name="selector">An optional descriptor to further describe the nodes usage operation</param>
INodesUsageResponse NodesUsage(Func<NodesUsageDescriptor, INodesUsageRequest> selector = null);

/// <inheritdoc/>
INodesUsageResponse NodesUsage(INodesUsageRequest request);

/// <inheritdoc/>
Task<INodesUsageResponse> NodesUsageAsync(Func<NodesUsageDescriptor, INodesUsageRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken));

/// <inheritdoc/>
Task<INodesUsageResponse> NodesUsageAsync(INodesUsageRequest request, CancellationToken cancellationToken = default(CancellationToken));
}

public partial class ElasticClient
{
/// <inheritdoc/>
public INodesUsageResponse NodesUsage(Func<NodesUsageDescriptor, INodesUsageRequest> selector = null) =>
this.NodesUsage(selector.InvokeOrDefault(new NodesUsageDescriptor()));

/// <inheritdoc/>
public INodesUsageResponse NodesUsage(INodesUsageRequest request) =>
this.Dispatcher.Dispatch<INodesUsageRequest, NodesUsageRequestParameters, NodesUsageResponse>(
request,
(p, d) => this.LowLevelDispatch.NodesUsageDispatch<NodesUsageResponse>(p)
);

/// <inheritdoc/>
public Task<INodesUsageResponse> NodesUsageAsync(Func<NodesUsageDescriptor, INodesUsageRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
this.NodesUsageAsync(selector.InvokeOrDefault(new NodesUsageDescriptor()), cancellationToken);

/// <inheritdoc/>
public Task<INodesUsageResponse> NodesUsageAsync(INodesUsageRequest request, CancellationToken cancellationToken = default(CancellationToken)) =>
this.Dispatcher.DispatchAsync<INodesUsageRequest, NodesUsageRequestParameters, NodesUsageResponse, INodesUsageResponse>(
request,
cancellationToken,
(p, d, c) => this.LowLevelDispatch.NodesUsageDispatchAsync<NodesUsageResponse>(p, c)
);
}
}
53 changes: 53 additions & 0 deletions src/Nest/Cluster/NodesUsage/NodeUsageResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Nest
{
public class NodeUsageMetadata
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the type should be NodesUsageMetadata to reflect the method name that it contains meta data on many nodes.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I think the name should be NodesMetaData, which mirrors the existing ShardsMetaData

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think MetaData suffix is a mistake in my part. We have both Metadata and MetaData suffixes in the code base and I've been leaning towards the first since that mimmics elasticsearch's snake casing of metadata. Maybe in 6.0 we do a sweep to standardize, worth the breaking change?

{
[JsonProperty(PropertyName = "total")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pedant alert! Can these just be [JsonProperty("total")], etc?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

public int Total { get; internal set; }

[JsonProperty(PropertyName = "successful")]
public int Successful { get; internal set; }

[JsonProperty(PropertyName = "failed")]
public int Failed { get; internal set; }
}

public class NodeUsageInformation
{
[JsonProperty(PropertyName = "timestamp")]
[JsonConverter(typeof(EpochMillisecondsDateTimeJsonConverter))]
public DateTimeOffset Timestamp { get; internal set; }

[JsonProperty(PropertyName = "since")]
[JsonConverter(typeof(EpochMillisecondsDateTimeJsonConverter))]
public DateTimeOffset Since { get; internal set; }

[JsonProperty(PropertyName = "rest_actions")]
public IReadOnlyDictionary<string, int> RestActions { get; internal set; }
}

public interface INodesUsageResponse : IResponse
{
string ClusterName { get; }

IReadOnlyDictionary<string, NodeUsageInformation> Nodes { get; }

NodeUsageMetadata NodeMetadata { get; }
}

public class NodesUsageResponse : ResponseBase, INodesUsageResponse
{
[JsonProperty(PropertyName = "cluster_name")]
public string ClusterName { get; internal set; }

[JsonProperty(PropertyName = "nodes")]
public IReadOnlyDictionary<string, NodeUsageInformation> Nodes { get; internal set; } = EmptyReadOnly<string, NodeUsageInformation>.Dictionary;

[JsonProperty(PropertyName = "_nodes")]
public NodeUsageMetadata NodeMetadata { get; internal set; }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe property name should be NodesMetaData, to mirror the type name (and since we can't use Nodes...)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at usage of ShardsMetaData, the property has tended to be called ShardsHit - maybe this should be NodesHit here?

}
}
9 changes: 9 additions & 0 deletions src/Nest/Cluster/NodesUsage/NodesUsageRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nest
{
public partial interface INodesUsageRequest { }

public partial class NodesUsageRequest { }

[DescriptorFor("NodesUsage")]
public partial class NodesUsageDescriptor { }
}
55 changes: 55 additions & 0 deletions src/Nest/Ingest/Processor/ElasticClient-IngestProcessorGrok.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Elasticsearch.Net;

namespace Nest
{
using System.Threading;
using NodesHotThreadConverter = Func<IApiCallDetails, Stream, NodesHotThreadsResponse>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

using directives should be outside the namesace in the file. Also, doesn't look like the using alias is needed here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy pasta. Fixed.


public partial interface IElasticClient
{
/// <summary>
/// Retrieving which patterns which the grok processor is packaged with, useful as different versions are bundled with different processors.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pedant alert!: Retrieving which patterns the grok processor

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aunglish.

/// <para> </para>https://www.elastic.co/guide/en/elasticsearch/plugins/master/ingest.html
/// </summary>
/// <param name="selector">An optional descriptor to further describe the endpoint usage operation</param>
IIngestProcessorGrokResponse IngestProcessorGrok(Func<IngestProcessorGrokDescriptor, IIngestProcessorGrokRequest> selector = null);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure about the name of this API; Perhaps GrokProcessorPatterns? Happy to go with consensus here

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure either, just picked a name, but happy to change it.


/// <inheritdoc/>
IIngestProcessorGrokResponse IngestProcessorGrok(IIngestProcessorGrokRequest request);

/// <inheritdoc/>
Task<IIngestProcessorGrokResponse> IngestProcessorGrokAsync(Func<IngestProcessorGrokDescriptor, IIngestProcessorGrokRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken));

/// <inheritdoc/>
Task<IIngestProcessorGrokResponse> IngestProcessorGrokAsync(IIngestProcessorGrokRequest request, CancellationToken cancellationToken = default(CancellationToken));
}

public partial class ElasticClient
{
/// <inheritdoc/>
public IIngestProcessorGrokResponse IngestProcessorGrok(Func<IngestProcessorGrokDescriptor, IIngestProcessorGrokRequest> selector = null) =>
this.IngestProcessorGrok(selector.InvokeOrDefault(new IngestProcessorGrokDescriptor()));

/// <inheritdoc/>
public IIngestProcessorGrokResponse IngestProcessorGrok(IIngestProcessorGrokRequest request) =>
this.Dispatcher.Dispatch<IIngestProcessorGrokRequest, IngestProcessorGrokRequestParameters, IngestProcessorGrokResponse>(
request,
(p, d) => this.LowLevelDispatch.IngestProcessorGrokDispatch<IngestProcessorGrokResponse>(p)
);

/// <inheritdoc/>
public Task<IIngestProcessorGrokResponse> IngestProcessorGrokAsync(Func<IngestProcessorGrokDescriptor, IIngestProcessorGrokRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
this.IngestProcessorGrokAsync(selector.InvokeOrDefault(new IngestProcessorGrokDescriptor()), cancellationToken);

/// <inheritdoc/>
public Task<IIngestProcessorGrokResponse> IngestProcessorGrokAsync(IIngestProcessorGrokRequest request, CancellationToken cancellationToken = default(CancellationToken)) =>
this.Dispatcher.DispatchAsync<IIngestProcessorGrokRequest, IngestProcessorGrokRequestParameters, IngestProcessorGrokResponse, IIngestProcessorGrokResponse>(
request,
cancellationToken,
(p, d, c) => this.LowLevelDispatch.IngestProcessorGrokDispatchAsync<IngestProcessorGrokResponse>(p, c)
);
}
}
9 changes: 9 additions & 0 deletions src/Nest/Ingest/Processor/IngestProcessorGrokRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nest
{
public partial interface IIngestProcessorGrokRequest { }

public partial class IngestProcessorGrokRequest { }

[DescriptorFor("IngestProcessorGrok")]
public partial class IngestProcessorGrokDescriptor { }
}
17 changes: 17 additions & 0 deletions src/Nest/Ingest/Processor/IngestProcessorGrokResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Nest
{
public interface IIngestProcessorGrokResponse : IResponse
{
IReadOnlyDictionary<string, string> Patterns { get; }
}

public class IngestProcessorGrokResponse : ResponseBase, IIngestProcessorGrokResponse
{
[JsonProperty(PropertyName = "patterns")]
public IReadOnlyDictionary<string, string> Patterns { get; internal set; } = EmptyReadOnly<string, string>.Dictionary;
}
}
9 changes: 9 additions & 0 deletions src/Nest/XPack/DeprecationInfo/DeprecationInfoRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nest
{
public partial interface IDeprecationInfoRequest { }

public partial class DeprecationInfoRequest { }

[DescriptorFor("XpackDeprecationInfo")]
public partial class DeprecationInfoDescriptor : IDeprecationInfoRequest { }
}
56 changes: 56 additions & 0 deletions src/Nest/XPack/DeprecationInfo/DeprecationInfoResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace Nest
{
[JsonConverter(typeof(StringEnumConverter))]
public enum DeprecationWarningLevel
{
[EnumMember(Value = "none")]
None,
[EnumMember(Value = "info")]
Information,
[EnumMember(Value = "warning")]
Warning,
[EnumMember(Value = "critical")]
Critical
}

public class DeprecationInfoItem
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DeprecationInfo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

{
[JsonProperty("level")]
public DeprecationWarningLevel Level { get; internal set; }

[JsonProperty("message")]
public string Message { get; internal set; }

[JsonProperty("url")]
public string Url { get; internal set; }

[JsonProperty("details")]
public string Details { get; internal set; }
}

public interface IDeprecationInfoResponse : IResponse
{
[JsonProperty("cluster_settings")]
IReadOnlyCollection<DeprecationInfoItem> ClusterSettings { get; }

[JsonProperty("node_settings")]
IReadOnlyCollection<DeprecationInfoItem> NodeSettings { get; }

[JsonProperty("index_settings")]
IReadOnlyDictionary<string, IReadOnlyCollection<DeprecationInfoItem>> IndexSettings { get; }
}

public class DeprecationInfoResponse : ResponseBase, IDeprecationInfoResponse
{
public IReadOnlyCollection<DeprecationInfoItem> ClusterSettings { get; internal set; } = EmptyReadOnly<DeprecationInfoItem>.Collection;
public IReadOnlyCollection<DeprecationInfoItem> NodeSettings { get; internal set; } = EmptyReadOnly<DeprecationInfoItem>.Collection;
public IReadOnlyDictionary<string, IReadOnlyCollection<DeprecationInfoItem>> IndexSettings { get; internal set; } = EmptyReadOnly<string, IReadOnlyCollection<DeprecationInfoItem>>.Dictionary;
}
}
Loading