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  }