github.com/rudderlabs/rudder-go-kit@v0.30.0/throttling/return.go (about) 1 package throttling 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/go-redis/redis/v8" 8 ) 9 10 type unsupportedReturn struct{} 11 12 func (*unsupportedReturn) Return(_ context.Context) error { return nil } 13 14 type redisSortedSetRemover interface { 15 ZRem(ctx context.Context, key string, members ...interface{}) *redis.IntCmd 16 } 17 18 type sortedSetRedisReturn struct { 19 // key is the key of the sorted set 20 key string 21 // members are the members (tokens) in the sorted set (bucket) 22 members []string 23 // remover is the redisSpeaker that removes the members from the sorted set (aka *redis.Client) 24 remover redisSortedSetRemover 25 } 26 27 func (r *sortedSetRedisReturn) Return(ctx context.Context) error { 28 var ( 29 length = len(r.members) 30 slice = make([]interface{}, length) 31 ) 32 for i, v := range r.members { 33 slice[i] = v 34 } 35 _, err := r.remover.ZRem(ctx, r.key, slice...).Result() 36 if err != nil { 37 return fmt.Errorf("could not remove members from sorted set: %v", err) 38 } 39 return nil 40 }