// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Threading.Tasks; using StackExchange.Redis; namespace EpicGames.Redis { /// /// Represents a typed Redis sorted set with a given key /// public record struct RedisSortedSet(IDatabaseAsync Database, RedisSortedSetKey Key); /// /// Extension methods for sets /// public static class RedisSortedSetExtensions { #region Conditions /// public static Condition SortedSetContains(this RedisSortedSet target, TElement value) => target.Key.SortedSetContains(value); /// public static Condition SortedSetEqual(this RedisSortedSet target, TElement value, RedisValue score) => target.Key.SortedSetEqual(value, score); /// public static Condition SortedSetLengthEqual(this RedisSortedSet target, long length) => target.Key.SortedSetLengthLessThan(length); /// public static Condition SortedSetLengthGreaterThan(this RedisSortedSet target, long length) => target.Key.SortedSetLengthGreaterThan(length); /// public static Condition SortedSetLengthLessThan(this RedisSortedSet target, long length) => target.Key.SortedSetLengthLessThan(length); /// public static Condition SortedSetNotContains(this RedisSortedSet target, TElement value) => target.Key.SortedSetNotContains(value); /// public static Condition SortedSetNotEqual(this RedisSortedSet target, TElement value, RedisValue score) => target.Key.SortedSetNotEqual(value, score); /// public static Condition SortedSetScoreExists(this RedisSortedSet target, RedisValue score) => target.Key.SortedSetScoreExists(score); /// public static Condition SortedSetScoreExists(this RedisSortedSet target, RedisValue score, RedisValue count) => target.Key.SortedSetScoreExists(score, count); #endregion #region SortedSetAddAsync /// public static Task AddAsync(this RedisSortedSet target, TElement value, double score, SortedSetWhen when = SortedSetWhen.Always, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetAddAsync(target.Key, value, score, when, flags); /// public static Task AddAsync(this RedisSortedSet target, SortedSetEntry[] values, SortedSetWhen when = SortedSetWhen.Always, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetAddAsync(target.Key, values, when, flags); #endregion #region SortedSetLengthAsync /// public static Task LengthAsync(this RedisSortedSet target, double min = Double.NegativeInfinity, double max = Double.PositiveInfinity, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetLengthAsync(target.Key, min, max, exclude, flags); #endregion #region SortedSetLengthByValueAsync /// public static Task LengthByValueAsync(this RedisSortedSet target, TElement min, TElement max, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetLengthByValueAsync(target.Key, min, max, exclude, flags); #endregion #region SortedSetRangeByRankAsync /// public static Task RangeByRankAsync(this RedisSortedSet target, long start = 0, long stop = -1, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRangeByRankAsync(target.Key, start, stop, order, flags); #endregion #region SortedSetRangeByRankWithScoresAsync /// public static Task[]> RangeByRankWithScoresAsync(this RedisSortedSet target, long start, long stop = -1, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRangeByRankWithScoresAsync(target.Key, start, stop, order, flags); #endregion #region SortedSetRangeByScoreAsync /// public static Task RangeByScoreAsync(this RedisSortedSet target, double start = Double.NegativeInfinity, double stop = Double.PositiveInfinity, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0L, long take = -1L, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRangeByScoreAsync(target.Key, start, stop, exclude, order, skip, take, flags); #endregion #region SortedSetRangeByScoreWithScoresAsync /// public static Task[]> SortedSetRangeByScoreWithScoresAsync(this RedisSortedSet target, double start = Double.NegativeInfinity, double stop = Double.PositiveInfinity, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0L, long take = -1L, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRangeByScoreWithScoresAsync(target.Key, start, stop, exclude, order, skip, take, flags); #endregion #region SortedSetRangeByValueAsync /// public static Task RangeByValueAsync(this RedisSortedSet target, TElement min, TElement max, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0L, long take = -1L, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRangeByValueAsync(target.Key, min, max, exclude, order, skip, take, flags); #endregion #region SortedSetRankAsync /// public static Task RankAsync(this RedisSortedSet target, TElement item, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRankAsync(target.Key, item, order, flags); #endregion #region SortedSetRemoveAsync /// public static Task RemoveAsync(this RedisSortedSet target, TElement value, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRemoveAsync(target.Key, value, flags); /// public static Task RemoveAsync(this RedisSortedSet target, TElement[] values, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRemoveAsync(target.Key, values, flags); #endregion #region SortedSetRemoveRangeByRankAsync /// public static Task RemoveRangeByRankAsync(this RedisSortedSet target, long start, long stop, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRemoveRangeByRankAsync(target.Key, start, stop, flags); #endregion #region SortedSetRemoveRangeByScoreAsync /// public static Task RemoveRangeByScoreAsync(this RedisSortedSet target, double start, double stop, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRemoveRangeByScoreAsync(target.Key, start, stop, exclude, flags); #endregion #region SortedSetRemoveRangeByValueAsync /// public static Task RemoveRangeByValueAsync(this RedisSortedSet target, TElement min, TElement max, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetRemoveRangeByValueAsync(target.Key, min, max, exclude, flags); #endregion #region SortedSetScanAsync /// public static IAsyncEnumerable> ScanAsync(this RedisSortedSet target, RedisValue pattern = default, int pageSize = 250, long cursor = 0, int pageOffset = 0, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetScanAsync(target.Key, pattern, pageSize, cursor, pageOffset, flags); #endregion #region SortedSetScoreAsync /// public static Task ScoreAsync(this RedisSortedSet target, TElement member, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetScoreAsync(target.Key, member, flags); #endregion #region SortedSetUpdateAsync /// public static Task UpdateAsync(this RedisSortedSet target, TElement member, double score, SortedSetWhen when = SortedSetWhen.Always, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetUpdateAsync(target.Key, member, score, when, flags); /// public static Task UpdateAsync(this RedisSortedSet target, SortedSetEntry[] values, SortedSetWhen when = SortedSetWhen.Always, CommandFlags flags = CommandFlags.None) => target.Database.SortedSetUpdateAsync(target.Key, values, when, flags); #endregion } }