diff --git a/pool/tree/pool.go b/pool/tree/pool.go index 38ef09e..28cc98b 100644 --- a/pool/tree/pool.go +++ b/pool/tree/pool.go @@ -26,6 +26,16 @@ const ( defaultStreamTimeout = 10 * time.Second ) +// SubTreeSort defines an order of nodes returned from GetSubTree RPC. +type SubTreeSort int32 + +const ( + // NoneOrder does not specify order of nodes returned in GetSubTree RPC. + NoneOrder SubTreeSort = iota + // AscendingOrder specifies ascending alphabetical order of nodes based on FilePath attribute. + AscendingOrder +) + var ( // ErrNodeNotFound is returned from Tree service in case of not found error. ErrNodeNotFound = errors.New("not found") @@ -119,6 +129,7 @@ type GetSubTreeParams struct { RootID uint64 Depth uint32 BearerToken []byte + Order SubTreeSort } // AddNodeParams groups parameters of Pool.AddNode operation. @@ -388,12 +399,17 @@ func (p *Pool) GetSubTree(ctx context.Context, prm GetSubTreeParams) (*SubTreeRe RootId: prm.RootID, Depth: prm.Depth, BearerToken: prm.BearerToken, - OrderBy: &grpcService.GetSubTreeRequest_Body_Order{ - Direction: grpcService.GetSubTreeRequest_Body_Order_Asc, - }, + OrderBy: new(grpcService.GetSubTreeRequest_Body_Order), }, } + switch prm.Order { + case AscendingOrder: + request.Body.OrderBy.Direction = grpcService.GetSubTreeRequest_Body_Order_Asc + default: + request.Body.OrderBy.Direction = grpcService.GetSubTreeRequest_Body_Order_None + } + if err := p.signRequest(request.Body, func(key, sign []byte) { request.Signature = &grpcService.Signature{ Key: key,