[#1] Return iterator from ListContainersAsync and SearchObjectsAsync
Signed-off-by: Ivan Pchelintsev <i.pchelintsev@yadro.com>
This commit is contained in:
parent
70ba87bc60
commit
8cacbcc8e9
3 changed files with 21 additions and 18 deletions
|
@ -179,8 +179,7 @@ public partial class Client
|
|||
await _objectServiceClient.DeleteAsync(request);
|
||||
}
|
||||
|
||||
//TODO: Return iterator
|
||||
public async Task<ObjectId[]> SearchObjectAsync(ContainerId cid, params ObjectFilter[] filters)
|
||||
public async IAsyncEnumerable<ObjectId> SearchObjectsAsync(ContainerId cid, params ObjectFilter[] filters)
|
||||
{
|
||||
var request = new SearchRequest
|
||||
{
|
||||
|
@ -199,25 +198,28 @@ public partial class Client
|
|||
;
|
||||
request.AddMetaHeader();
|
||||
request.Sign(_key);
|
||||
var ids = await SearchObject(request);
|
||||
return ids.Select(oid => ObjectId.FromHash(oid.Value.ToByteArray())).ToArray();
|
||||
var objectsIds = SearchObjects(request);
|
||||
await foreach (var oid in objectsIds)
|
||||
{
|
||||
yield return ObjectId.FromHash(oid.Value.ToByteArray());
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<List<ObjectID>> SearchObject(SearchRequest request)
|
||||
private async IAsyncEnumerable<ObjectID> SearchObjects(SearchRequest request)
|
||||
{
|
||||
var objectsIds = new List<ObjectID> { };
|
||||
using var stream = SearchObjectInit(request);
|
||||
using var stream = SearchObjectsInit(request);
|
||||
var ids = await stream.Read();
|
||||
while (ids is not null)
|
||||
{
|
||||
objectsIds.AddRange(ids);
|
||||
foreach (var oid in ids)
|
||||
{
|
||||
yield return oid;
|
||||
}
|
||||
ids = await stream.Read();
|
||||
}
|
||||
|
||||
return objectsIds;
|
||||
}
|
||||
|
||||
private SearchReader SearchObjectInit(SearchRequest initRequest)
|
||||
private SearchReader SearchObjectsInit(SearchRequest initRequest)
|
||||
{
|
||||
if (initRequest is null)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue