Skip to content

Generate additional client method overloads #6420

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

Merged
merged 8 commits into from
May 26, 2022
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 0 additions & 4 deletions src/Elastic.Clients.Elasticsearch/Api/IndexRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@ internal static HttpMethod GetHttpMethod(IndexRequest<TDocument> request) =>

public sealed partial class IndexRequestDescriptor<TDocument> : ICustomJsonWriter
{
// TODO: Codegen
public IndexRequestDescriptor(TDocument documentWithId, IndexName index = null, Id id = null) : this(index ?? typeof(TDocument), id ?? Elasticsearch.Id.From(documentWithId)) => DocumentValue = documentWithId;


// TODO: Codegen
public IndexRequestDescriptor<TDocument> Document(TDocument document)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,95 +10,30 @@ namespace Elastic.Clients.Elasticsearch
{
public partial class ElasticsearchClient
{
public IndexResponse Index<TDocument>(TDocument document, Action<IndexRequestDescriptor<TDocument>> configureRequest)
public Task<UpdateResponse<TDocument>> UpdateAsync<TDocument, TPartialDocument>(IndexName index, Id id, CancellationToken cancellationToken = default)
{
var descriptor = new IndexRequestDescriptor<TDocument>(documentWithId: document);
configureRequest?.Invoke(descriptor);
return DoRequest<IndexRequestDescriptor<TDocument>, IndexResponse>(descriptor);
}

public IndexResponse Index<TDocument>(TDocument document)
{
var descriptor = new IndexRequestDescriptor<TDocument>(documentWithId: document);
return DoRequest<IndexRequestDescriptor<TDocument>, IndexResponse>(descriptor);
}

public Task<IndexResponse> IndexAsync<TDocument>(TDocument document, CancellationToken cancellationToken = default)
{
var descriptor = new IndexRequestDescriptor<TDocument>(documentWithId: document);
return DoRequestAsync<IndexRequestDescriptor<TDocument>, IndexResponse>(descriptor);
}

public Task<IndexResponse> IndexAsync<TDocument>(TDocument document, Action<IndexRequestDescriptor<TDocument>> configureRequest, CancellationToken cancellationToken = default)
{
var descriptor = new IndexRequestDescriptor<TDocument>(documentWithId: document);
configureRequest?.Invoke(descriptor);
return DoRequestAsync<IndexRequestDescriptor<TDocument>, IndexResponse>(descriptor);
}

public CreateResponse Create<TDocument>(TDocument document, Action<CreateRequestDescriptor<TDocument>> configureRequest)
{
var descriptor = new CreateRequestDescriptor<TDocument>(document);
configureRequest?.Invoke(descriptor);
return DoRequest<CreateRequestDescriptor<TDocument>, CreateResponse>(descriptor);
}

public Task<CreateResponse> CreateAsync<TDocument>(TDocument document, Action<CreateRequestDescriptor<TDocument>> configureRequest, CancellationToken cancellationToken = default)
{
var descriptor = new CreateRequestDescriptor<TDocument>(document);
configureRequest?.Invoke(descriptor);
return DoRequestAsync<CreateRequestDescriptor<TDocument>, CreateResponse>(descriptor);
}

public DeleteResponse Delete<TDocument>(Id id, Action<DeleteRequestDescriptor<TDocument>> configureRequest)
{
var descriptor = new DeleteRequestDescriptor<TDocument>(id);
configureRequest?.Invoke(descriptor);
return DoRequest<DeleteRequestDescriptor<TDocument>, DeleteResponse>(descriptor);
}

public Task<DeleteResponse> DeleteAsync<TDocument>(Id id, Action<DeleteRequestDescriptor<TDocument>> configureRequest, CancellationToken cancellationToken = default)
{
var descriptor = new DeleteRequestDescriptor<TDocument>(id);
configureRequest?.Invoke(descriptor);
return DoRequestAsync<DeleteRequestDescriptor<TDocument>, DeleteResponse>(descriptor);
var descriptor = new UpdateRequestDescriptor<TDocument, TPartialDocument>(index, id);
return DoRequestAsync<UpdateRequestDescriptor<TDocument, TPartialDocument>, UpdateResponse<TDocument>>(descriptor);
}

public Task<UpdateResponse<TDocument>> UpdateAsync<TDocument, TPartialDocument>(IndexName index, Id id, Action<UpdateRequestDescriptor<TDocument, TPartialDocument>> configureRequest = null, CancellationToken cancellationToken = default)
public Task<UpdateResponse<TDocument>> UpdateAsync<TDocument, TPartialDocument>(IndexName index, Id id, Action<UpdateRequestDescriptor<TDocument, TPartialDocument>> configureRequest, CancellationToken cancellationToken = default)
{
var descriptor = new UpdateRequestDescriptor<TDocument, TPartialDocument>(index, id);
configureRequest?.Invoke(descriptor);
return DoRequestAsync<UpdateRequestDescriptor<TDocument, TPartialDocument>, UpdateResponse<TDocument>>(descriptor);
}

public UpdateResponse<TDocument> Update<TDocument, TPartialDocument>(IndexName index, Id id, Action<UpdateRequestDescriptor<TDocument, TPartialDocument>> configureRequest = null)
public UpdateResponse<TDocument> Update<TDocument, TPartialDocument>(IndexName index, Id id)
{
var descriptor = new UpdateRequestDescriptor<TDocument, TPartialDocument>(index, id);
configureRequest?.Invoke(descriptor);
return DoRequest<UpdateRequestDescriptor<TDocument, TPartialDocument>, UpdateResponse<TDocument>>(descriptor);
}

public SourceResponse<TDocument> Source<TDocument>(DocumentPath<TDocument> id, Action<SourceRequestDescriptor<TDocument>> configureRequest = null)
public UpdateResponse<TDocument> Update<TDocument, TPartialDocument>(IndexName index, Id id, Action<UpdateRequestDescriptor<TDocument, TPartialDocument>> configureRequest)
{
var descriptor = new SourceRequestDescriptor<TDocument>(document: id.Document, index: id?.Self?.Index ?? typeof(TDocument), id: id?.Self?.Id ?? Id.From(id.Document));
configureRequest?.Invoke(descriptor);
return DoRequest<SourceRequestDescriptor<TDocument>, SourceResponse<TDocument>>(descriptor);
}

public CountResponse Count<TDocument>(Action<CountRequestDescriptor<TDocument>> configureRequest = null)
{
var descriptor = new CountRequestDescriptor<TDocument>();
configureRequest?.Invoke(descriptor);
descriptor.BeforeRequest();
return DoRequest<CountRequestDescriptor<TDocument>, CountResponse>(descriptor);
}

public Task<CountResponse> CountAsync<TDocument>(Action<CountRequestDescriptor<TDocument>> configureRequest = null, CancellationToken cancellationToken = default)
{
var descriptor = new CountRequestDescriptor<TDocument>();
var descriptor = new UpdateRequestDescriptor<TDocument, TPartialDocument>(index, id);
configureRequest?.Invoke(descriptor);
descriptor.BeforeRequest();
return DoRequestAsync<CountRequestDescriptor<TDocument>, CountResponse>(descriptor);
return DoRequest<UpdateRequestDescriptor<TDocument, TPartialDocument>, UpdateResponse<TDocument>>(descriptor);
}
}
}
38 changes: 36 additions & 2 deletions src/Elastic.Clients.Elasticsearch/Client/IndexManyExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@ namespace Elastic.Clients.Elasticsearch;
/// </summary>
public static class IndexManyExtensions
{
/// <summary>
/// Shortcut into the Bulk call that indexes the specified objects
/// <para> </para>
/// https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
/// </summary>
/// <param name="client"></param>
/// <typeparam name="T">The type used to infer the default index and typename</typeparam>
/// <param name="objects">List of objects to index, Id will be inferred (Id property or IdProperty attribute on type)</param>
/// <param name="type">Override the inferred typename for T</param>
public static BulkResponse IndexMany<T>(this ElasticsearchClient client, IEnumerable<T> @objects)
where T : class
{
var bulkRequest = CreateIndexBulkRequest(objects, null);
return client.Bulk(bulkRequest);
}

/// <summary>
/// Shortcut into the Bulk call that indexes the specified objects
/// <para> </para>
Expand All @@ -24,13 +40,31 @@ public static class IndexManyExtensions
/// <param name="objects">List of objects to index, Id will be inferred (Id property or IdProperty attribute on type)</param>
/// <param name="index">Override the inferred indexname for T</param>
/// <param name="type">Override the inferred typename for T</param>
public static BulkResponse IndexMany<T>(this ElasticsearchClient client, IEnumerable<T> @objects, IndexName index = null)
public static BulkResponse IndexMany<T>(this ElasticsearchClient client, IEnumerable<T> @objects, IndexName index)
where T : class
{
var bulkRequest = CreateIndexBulkRequest(objects, index);
return client.Bulk(bulkRequest);
}

/// <summary>
/// Shortcut into the Bulk call that indexes the specified objects
/// <para> </para>
/// https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
/// </summary>
/// <param name="client"></param>
/// <typeparam name="T">The type used to infer the default index and typename</typeparam>
/// <param name="objects">List of objects to index, Id will be inferred (Id property or IdProperty attribute on type)</param>
/// <param name="type">Override the inferred typename for T</param>
public static Task<BulkResponse> IndexManyAsync<T>(this ElasticsearchClient client, IEnumerable<T> objects,
CancellationToken cancellationToken = default
)
where T : class
{
var bulkRequest = CreateIndexBulkRequest(objects, null);
return client.BulkAsync(bulkRequest, cancellationToken);
}

/// <summary>
/// Shortcut into the Bulk call that indexes the specified objects
/// <para> </para>
Expand All @@ -41,7 +75,7 @@ public static BulkResponse IndexMany<T>(this ElasticsearchClient client, IEnumer
/// <param name="objects">List of objects to index, Id will be inferred (Id property or IdProperty attribute on type)</param>
/// <param name="index">Override the inferred indexname for T</param>
/// <param name="type">Override the inferred typename for T</param>
public static Task<BulkResponse> IndexManyAsync<T>(this ElasticsearchClient client, IEnumerable<T> objects, IndexName index = null,
public static Task<BulkResponse> IndexManyAsync<T>(this ElasticsearchClient client, IEnumerable<T> objects, IndexName index,
CancellationToken cancellationToken = default
)
where T : class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class NamespacedClientProxy
{
private readonly ElasticsearchClient _client;

protected NamespacedClientProxy(ElasticsearchClient client) => _client = client;
internal NamespacedClientProxy(ElasticsearchClient client) => _client = client;

internal TResponse DoRequest<TRequest, TResponse>(
TRequest request,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@

namespace Elastic.Clients.Elasticsearch;

public interface IDocumentPath
// MARKED INTERNAL AS WE MAY NO LONGER USE THIS TYPE
// TODO - REVIEW THIS
internal interface IDocumentPath
{
Id Id { get; set; }
IndexName Index { get; set; }
}

public sealed class DocumentPath<T> : IEquatable<DocumentPath<T>>, IDocumentPath
// MARKED INTERNAL AS WE MAY NO LONGER USE THIS TYPE
// TODO - REVIEW THIS
internal sealed class DocumentPath<T> : IEquatable<DocumentPath<T>>, IDocumentPath
{
public DocumentPath(T document) : this(Elasticsearch.Id.From(document)) => Document = document;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@ internal static class ApiUrlsLookups
internal static ApiUrls SecurityClearCachedPrivileges = new ApiUrls(new[] { "/_security/privilege/{application}/_clear_cache" });
internal static ApiUrls SecurityClearCachedRealms = new ApiUrls(new[] { "/_security/realm/{realms}/_clear_cache" });
internal static ApiUrls SecurityClearCachedRoles = new ApiUrls(new[] { "/_security/role/{name}/_clear_cache" });
internal static ApiUrls SecurityCreateApiKey = new ApiUrls(new[] { "/_security/api_key" });
internal static ApiUrls SecurityDeletePrivileges = new ApiUrls(new[] { "/_security/privilege/{application}/{name}" });
internal static ApiUrls SecurityDeleteRoleMapping = new ApiUrls(new[] { "/_security/role_mapping/{name}" });
internal static ApiUrls SecurityDeleteRole = new ApiUrls(new[] { "/_security/role/{name}" });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public sealed class DeleteByQueryRequestParameters : RequestParameters<DeleteByQ
public Elastic.Clients.Elasticsearch.SearchType? SearchType { get => Q<Elastic.Clients.Elasticsearch.SearchType?>("search_type"); set => Q("search_type", value); }

[JsonIgnore]
public long? Slices { get => Q<long?>("slices"); set => Q("slices", value); }
public Elastic.Clients.Elasticsearch.Slices? Slices { get => Q<Elastic.Clients.Elasticsearch.Slices?>("slices"); set => Q("slices", value); }

[JsonIgnore]
public IEnumerable<string>? Sort { get => Q<IEnumerable<string>?>("sort"); set => Q("sort", value); }
Expand Down Expand Up @@ -182,7 +182,7 @@ public DeleteByQueryRequest(Elastic.Clients.Elasticsearch.Indices indices) : bas
public Elastic.Clients.Elasticsearch.SearchType? SearchType { get => Q<Elastic.Clients.Elasticsearch.SearchType?>("search_type"); set => Q("search_type", value); }

[JsonIgnore]
public long? Slices { get => Q<long?>("slices"); set => Q("slices", value); }
public Elastic.Clients.Elasticsearch.Slices? Slices { get => Q<Elastic.Clients.Elasticsearch.Slices?>("slices"); set => Q("slices", value); }

[JsonIgnore]
public IEnumerable<string>? Sort { get => Q<IEnumerable<string>?>("sort"); set => Q("sort", value); }
Expand Down Expand Up @@ -252,7 +252,7 @@ internal DeleteByQueryRequestDescriptor()
public DeleteByQueryRequestDescriptor<TDocument> ScrollSize(long? scrollSize) => Qs("scroll_size", scrollSize);
public DeleteByQueryRequestDescriptor<TDocument> SearchTimeout(Elastic.Clients.Elasticsearch.Time? searchTimeout) => Qs("search_timeout", searchTimeout);
public DeleteByQueryRequestDescriptor<TDocument> SearchType(Elastic.Clients.Elasticsearch.SearchType? searchType) => Qs("search_type", searchType);
public DeleteByQueryRequestDescriptor<TDocument> Slices(long? slices) => Qs("slices", slices);
public DeleteByQueryRequestDescriptor<TDocument> Slices(Elastic.Clients.Elasticsearch.Slices? slices) => Qs("slices", slices);
public DeleteByQueryRequestDescriptor<TDocument> Sort(IEnumerable<string>? sort) => Qs("sort", sort);
public DeleteByQueryRequestDescriptor<TDocument> Stats(IEnumerable<string>? stats) => Qs("stats", stats);
public DeleteByQueryRequestDescriptor<TDocument> TerminateAfter(long? terminateAfter) => Qs("terminate_after", terminateAfter);
Expand Down Expand Up @@ -413,7 +413,7 @@ internal DeleteByQueryRequestDescriptor()
public DeleteByQueryRequestDescriptor ScrollSize(long? scrollSize) => Qs("scroll_size", scrollSize);
public DeleteByQueryRequestDescriptor SearchTimeout(Elastic.Clients.Elasticsearch.Time? searchTimeout) => Qs("search_timeout", searchTimeout);
public DeleteByQueryRequestDescriptor SearchType(Elastic.Clients.Elasticsearch.SearchType? searchType) => Qs("search_type", searchType);
public DeleteByQueryRequestDescriptor Slices(long? slices) => Qs("slices", slices);
public DeleteByQueryRequestDescriptor Slices(Elastic.Clients.Elasticsearch.Slices? slices) => Qs("slices", slices);
public DeleteByQueryRequestDescriptor Sort(IEnumerable<string>? sort) => Qs("sort", sort);
public DeleteByQueryRequestDescriptor Stats(IEnumerable<string>? stats) => Qs("stats", stats);
public DeleteByQueryRequestDescriptor TerminateAfter(long? terminateAfter) => Qs("terminate_after", terminateAfter);
Expand Down
13 changes: 10 additions & 3 deletions src/Elastic.Clients.Elasticsearch/_Generated/Api/IndexRequest.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,15 +114,22 @@ public IndexRequest(Elastic.Clients.Elasticsearch.IndexName index) : base(r => r
public sealed partial class IndexRequestDescriptor<TDocument> : RequestDescriptorBase<IndexRequestDescriptor<TDocument>, IndexRequestParameters>
{
internal IndexRequestDescriptor(Action<IndexRequestDescriptor<TDocument>> configure) => configure.Invoke(this);
public IndexRequestDescriptor(Elastic.Clients.Elasticsearch.IndexName index, Elastic.Clients.Elasticsearch.Id? id) : base(r => r.Required("index", index).Optional("id", id))
internal IndexRequestDescriptor(Elastic.Clients.Elasticsearch.IndexName index, Elastic.Clients.Elasticsearch.Id? id) : base(r => r.Required("index", index).Optional("id", id))
{
}

internal IndexRequestDescriptor(Elastic.Clients.Elasticsearch.IndexName index) : base(r => r.Required("index", index))
public IndexRequestDescriptor(TDocument document) : this(typeof(TDocument), Elasticsearch.Id.From(document)) => DocumentValue = document;
public IndexRequestDescriptor(TDocument document, IndexName index, Id id) : this(index, id) => DocumentValue = document;
public IndexRequestDescriptor(TDocument document, IndexName index) : this(index, Elasticsearch.Id.From(document)) => DocumentValue = document;
public IndexRequestDescriptor(TDocument document, Id id) : this(typeof(TDocument), id) => DocumentValue = document;
public IndexRequestDescriptor(Id id) : this(typeof(TDocument), id)
{
}

public IndexRequestDescriptor(Elastic.Clients.Elasticsearch.IndexName index) : base(r => r.Required("index", index))
{
}

public IndexRequestDescriptor(TDocument document) : this(typeof(TDocument)) => DocumentValue = document;
internal IndexRequestDescriptor()
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public sealed class ReindexRequestParameters : RequestParameters<ReindexRequestP
public Elastic.Clients.Elasticsearch.Time? Scroll { get => Q<Elastic.Clients.Elasticsearch.Time?>("scroll"); set => Q("scroll", value); }

[JsonIgnore]
public long? Slices { get => Q<long?>("slices"); set => Q("slices", value); }
public Elastic.Clients.Elasticsearch.Slices? Slices { get => Q<Elastic.Clients.Elasticsearch.Slices?>("slices"); set => Q("slices", value); }

[JsonIgnore]
public Elastic.Clients.Elasticsearch.Time? Timeout { get => Q<Elastic.Clients.Elasticsearch.Time?>("timeout"); set => Q("timeout", value); }
Expand Down Expand Up @@ -67,7 +67,7 @@ public partial class ReindexRequest : PlainRequestBase<ReindexRequestParameters>
public Elastic.Clients.Elasticsearch.Time? Scroll { get => Q<Elastic.Clients.Elasticsearch.Time?>("scroll"); set => Q("scroll", value); }

[JsonIgnore]
public long? Slices { get => Q<long?>("slices"); set => Q("slices", value); }
public Elastic.Clients.Elasticsearch.Slices? Slices { get => Q<Elastic.Clients.Elasticsearch.Slices?>("slices"); set => Q("slices", value); }

[JsonIgnore]
public Elastic.Clients.Elasticsearch.Time? Timeout { get => Q<Elastic.Clients.Elasticsearch.Time?>("timeout"); set => Q("timeout", value); }
Expand Down Expand Up @@ -120,7 +120,7 @@ public ReindexRequestDescriptor()
public ReindexRequestDescriptor<TDocument> RequestsPerSecond(long? requestsPerSecond) => Qs("requests_per_second", requestsPerSecond);
public ReindexRequestDescriptor<TDocument> RequireAlias(bool? requireAlias = true) => Qs("require_alias", requireAlias);
public ReindexRequestDescriptor<TDocument> Scroll(Elastic.Clients.Elasticsearch.Time? scroll) => Qs("scroll", scroll);
public ReindexRequestDescriptor<TDocument> Slices(long? slices) => Qs("slices", slices);
public ReindexRequestDescriptor<TDocument> Slices(Elastic.Clients.Elasticsearch.Slices? slices) => Qs("slices", slices);
public ReindexRequestDescriptor<TDocument> Timeout(Elastic.Clients.Elasticsearch.Time? timeout) => Qs("timeout", timeout);
public ReindexRequestDescriptor<TDocument> WaitForActiveShards(Elastic.Clients.Elasticsearch.WaitForActiveShards? waitForActiveShards) => Qs("wait_for_active_shards", waitForActiveShards);
public ReindexRequestDescriptor<TDocument> WaitForCompletion(bool? waitForCompletion = true) => Qs("wait_for_completion", waitForCompletion);
Expand Down Expand Up @@ -325,7 +325,7 @@ public ReindexRequestDescriptor()
public ReindexRequestDescriptor RequestsPerSecond(long? requestsPerSecond) => Qs("requests_per_second", requestsPerSecond);
public ReindexRequestDescriptor RequireAlias(bool? requireAlias = true) => Qs("require_alias", requireAlias);
public ReindexRequestDescriptor Scroll(Elastic.Clients.Elasticsearch.Time? scroll) => Qs("scroll", scroll);
public ReindexRequestDescriptor Slices(long? slices) => Qs("slices", slices);
public ReindexRequestDescriptor Slices(Elastic.Clients.Elasticsearch.Slices? slices) => Qs("slices", slices);
public ReindexRequestDescriptor Timeout(Elastic.Clients.Elasticsearch.Time? timeout) => Qs("timeout", timeout);
public ReindexRequestDescriptor WaitForActiveShards(Elastic.Clients.Elasticsearch.WaitForActiveShards? waitForActiveShards) => Qs("wait_for_active_shards", waitForActiveShards);
public ReindexRequestDescriptor WaitForCompletion(bool? waitForCompletion = true) => Qs("wait_for_completion", waitForCompletion);
Expand Down
Loading