/// <summary> /// Initializes a new instance of the OrderByContinuationToken struct. /// </summary> /// <param name="compositeContinuationToken">The composite continuation token (refer to property documentation).</param> /// <param name="orderByItems">The order by items (refer to property documentation).</param> /// <param name="rid">The rid (refer to property documentation).</param> /// <param name="skipCount">The skip count (refer to property documentation).</param> /// <param name="filter">The filter (refer to property documentation).</param> public OrderByContinuationToken( CompositeContinuationToken compositeContinuationToken, IReadOnlyList <OrderByItem> orderByItems, string rid, int skipCount, string filter) { if (orderByItems.Count == 0) { throw new ArgumentException($"{nameof(orderByItems)} can not be empty."); } if (string.IsNullOrWhiteSpace(rid)) { throw new ArgumentNullException($"{nameof(rid)} can not be null or empty or whitespace."); } if (skipCount < 0) { throw new ArgumentException($"{nameof(skipCount)} can not be negative."); } //// filter is allowed to be null. this.CompositeContinuationToken = compositeContinuationToken ?? throw new ArgumentNullException(nameof(compositeContinuationToken)); this.OrderByItems = orderByItems ?? throw new ArgumentNullException(nameof(orderByItems)); this.Rid = rid; this.SkipCount = skipCount; this.Filter = filter; }
public static CosmosElement ToCosmosElement(OrderByContinuationToken orderByContinuationToken) { CosmosElement compositeContinuationToken = CompositeContinuationToken.ToCosmosElement(orderByContinuationToken.CompositeContinuationToken); List <CosmosElement> orderByItemsRaw = new List <CosmosElement>(); foreach (OrderByItem orderByItem in orderByContinuationToken.OrderByItems) { orderByItemsRaw.Add(OrderByItem.ToCosmosElement(orderByItem)); } CosmosArray orderByItems = CosmosArray.Create(orderByItemsRaw); CosmosElement filter = orderByContinuationToken.Filter == null?CosmosNull.Create() : (CosmosElement)CosmosString.Create(orderByContinuationToken.Filter); CosmosObject cosmosObject = CosmosObject.Create( new Dictionary <string, CosmosElement>() { { PropertyNames.CompositeToken, compositeContinuationToken }, { PropertyNames.OrderByItems, orderByItems }, { PropertyNames.Rid, CosmosString.Create(orderByContinuationToken.Rid) }, { PropertyNames.SkipCount, CosmosNumber64.Create(orderByContinuationToken.SkipCount) }, { PropertyNames.Filter, filter }, }); return(cosmosObject); }
public static TryCatch <CompositeContinuationToken> TryCreateFromCosmosElement(CosmosElement cosmosElement) { if (!(cosmosElement is CosmosObject cosmosObject)) { return(TryCatch <CompositeContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(CompositeContinuationToken)} is not an object: {cosmosElement}"))); } if (!cosmosObject.TryGetValue(PropertyNames.Token, out CosmosElement rawToken)) { return(TryCatch <CompositeContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(CompositeContinuationToken)} is missing field: '{PropertyNames.Token}': {cosmosElement}"))); } string token; if (rawToken is CosmosString rawTokenString) { token = rawTokenString.Value; } else { token = null; } if (!cosmosObject.TryGetValue(PropertyNames.Range, out CosmosObject rawRange)) { return(TryCatch <CompositeContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(CompositeContinuationToken)} is missing field: '{PropertyNames.Range}': {cosmosElement}"))); } if (!rawRange.TryGetValue(PropertyNames.Min, out CosmosString rawMin)) { return(TryCatch <CompositeContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(CompositeContinuationToken)} is missing field: '{PropertyNames.Min}': {cosmosElement}"))); } string min = rawMin.Value; if (!rawRange.TryGetValue(PropertyNames.Max, out CosmosString rawMax)) { return(TryCatch <CompositeContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(CompositeContinuationToken)} is missing field: '{PropertyNames.Max}': {cosmosElement}"))); } string max = rawMax.Value; Documents.Routing.Range <string> range = new Documents.Routing.Range <string>(min, max, true, false); CompositeContinuationToken compositeContinuationToken = new CompositeContinuationToken() { Token = token, Range = range, }; return(TryCatch <CompositeContinuationToken> .FromResult(compositeContinuationToken)); }
public static CosmosElement ToCosmosElement(CompositeContinuationToken compositeContinuationToken) { CosmosElement token = compositeContinuationToken.Token == null?CosmosNull.Create() : (CosmosElement)CosmosString.Create(compositeContinuationToken.Token); return(CosmosObject.Create( new Dictionary <string, CosmosElement>() { { CompositeContinuationToken.PropertyNames.Token, token }, { CompositeContinuationToken.PropertyNames.Range, CosmosObject.Create( new Dictionary <string, CosmosElement>() { { PropertyNames.Min, CosmosString.Create(compositeContinuationToken.Range.Min) }, { PropertyNames.Max, CosmosString.Create(compositeContinuationToken.Range.Max) } }) }, })); }
public static TryCatch <OrderByContinuationToken> TryCreateFromCosmosElement(CosmosElement cosmosElement) { if (!(cosmosElement is CosmosObject cosmosObject)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is not an object: {cosmosElement}"))); } if (!cosmosObject.TryGetValue(PropertyNames.CompositeToken, out CosmosElement compositeContinuationTokenElement)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{PropertyNames.CompositeToken}': {cosmosElement}"))); } TryCatch <CompositeContinuationToken> tryCompositeContinuation = CompositeContinuationToken.TryCreateFromCosmosElement(compositeContinuationTokenElement); if (!tryCompositeContinuation.Succeeded) { return(TryCatch <OrderByContinuationToken> .FromException(tryCompositeContinuation.Exception)); } CompositeContinuationToken compositeContinuationToken = tryCompositeContinuation.Result; if (!cosmosObject.TryGetValue(PropertyNames.OrderByItems, out CosmosArray orderByItemsRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{PropertyNames.OrderByItems}': {cosmosElement}"))); } List <OrderByItem> orderByItems = orderByItemsRaw.Select(x => OrderByItem.FromCosmosElement(x)).ToList(); if (!cosmosObject.TryGetValue(PropertyNames.Rid, out CosmosString ridRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{PropertyNames.Rid}': {cosmosElement}"))); } string rid = ridRaw.Value; if (!cosmosObject.TryGetValue(PropertyNames.SkipCount, out CosmosNumber64 skipCountRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{PropertyNames.SkipCount}': {cosmosElement}"))); } int skipCount = (int)Number64.ToLong(skipCountRaw.GetValue()); if (!cosmosObject.TryGetValue(PropertyNames.Filter, out CosmosElement filterRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{PropertyNames.Filter}': {cosmosElement}"))); } string filter; if (filterRaw is CosmosString filterStringRaw) { filter = filterStringRaw.Value; } else { filter = null; } OrderByContinuationToken orderByContinuationToken = new OrderByContinuationToken( compositeContinuationToken, orderByItems, rid, skipCount, filter); return(TryCatch <OrderByContinuationToken> .FromResult(orderByContinuationToken)); }