You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
| package redis
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| type GearsCmdable interface {
 | |
| 	TFunctionLoad(ctx context.Context, lib string) *StatusCmd
 | |
| 	TFunctionLoadArgs(ctx context.Context, lib string, options *TFunctionLoadOptions) *StatusCmd
 | |
| 	TFunctionDelete(ctx context.Context, libName string) *StatusCmd
 | |
| 	TFunctionList(ctx context.Context) *MapStringInterfaceSliceCmd
 | |
| 	TFunctionListArgs(ctx context.Context, options *TFunctionListOptions) *MapStringInterfaceSliceCmd
 | |
| 	TFCall(ctx context.Context, libName string, funcName string, numKeys int) *Cmd
 | |
| 	TFCallArgs(ctx context.Context, libName string, funcName string, numKeys int, options *TFCallOptions) *Cmd
 | |
| 	TFCallASYNC(ctx context.Context, libName string, funcName string, numKeys int) *Cmd
 | |
| 	TFCallASYNCArgs(ctx context.Context, libName string, funcName string, numKeys int, options *TFCallOptions) *Cmd
 | |
| }
 | |
| 
 | |
| type TFunctionLoadOptions struct {
 | |
| 	Replace bool
 | |
| 	Config  string
 | |
| }
 | |
| 
 | |
| type TFunctionListOptions struct {
 | |
| 	Withcode bool
 | |
| 	Verbose  int
 | |
| 	Library  string
 | |
| }
 | |
| 
 | |
| type TFCallOptions struct {
 | |
| 	Keys      []string
 | |
| 	Arguments []string
 | |
| }
 | |
| 
 | |
| // TFunctionLoad - load a new JavaScript library into Redis.
 | |
| // For more information - https://redis.io/commands/tfunction-load/
 | |
| func (c cmdable) TFunctionLoad(ctx context.Context, lib string) *StatusCmd {
 | |
| 	args := []interface{}{"TFUNCTION", "LOAD", lib}
 | |
| 	cmd := NewStatusCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) TFunctionLoadArgs(ctx context.Context, lib string, options *TFunctionLoadOptions) *StatusCmd {
 | |
| 	args := []interface{}{"TFUNCTION", "LOAD"}
 | |
| 	if options != nil {
 | |
| 		if options.Replace {
 | |
| 			args = append(args, "REPLACE")
 | |
| 		}
 | |
| 		if options.Config != "" {
 | |
| 			args = append(args, "CONFIG", options.Config)
 | |
| 		}
 | |
| 	}
 | |
| 	args = append(args, lib)
 | |
| 	cmd := NewStatusCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // TFunctionDelete - delete a JavaScript library from Redis.
 | |
| // For more information - https://redis.io/commands/tfunction-delete/
 | |
| func (c cmdable) TFunctionDelete(ctx context.Context, libName string) *StatusCmd {
 | |
| 	args := []interface{}{"TFUNCTION", "DELETE", libName}
 | |
| 	cmd := NewStatusCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // TFunctionList - list the functions with additional information about each function.
 | |
| // For more information - https://redis.io/commands/tfunction-list/
 | |
| func (c cmdable) TFunctionList(ctx context.Context) *MapStringInterfaceSliceCmd {
 | |
| 	args := []interface{}{"TFUNCTION", "LIST"}
 | |
| 	cmd := NewMapStringInterfaceSliceCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) TFunctionListArgs(ctx context.Context, options *TFunctionListOptions) *MapStringInterfaceSliceCmd {
 | |
| 	args := []interface{}{"TFUNCTION", "LIST"}
 | |
| 	if options != nil {
 | |
| 		if options.Withcode {
 | |
| 			args = append(args, "WITHCODE")
 | |
| 		}
 | |
| 		if options.Verbose != 0 {
 | |
| 			v := strings.Repeat("v", options.Verbose)
 | |
| 			args = append(args, v)
 | |
| 		}
 | |
| 		if options.Library != "" {
 | |
| 			args = append(args, "LIBRARY", options.Library)
 | |
| 		}
 | |
| 	}
 | |
| 	cmd := NewMapStringInterfaceSliceCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // TFCall - invoke a function.
 | |
| // For more information - https://redis.io/commands/tfcall/
 | |
| func (c cmdable) TFCall(ctx context.Context, libName string, funcName string, numKeys int) *Cmd {
 | |
| 	lf := libName + "." + funcName
 | |
| 	args := []interface{}{"TFCALL", lf, numKeys}
 | |
| 	cmd := NewCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) TFCallArgs(ctx context.Context, libName string, funcName string, numKeys int, options *TFCallOptions) *Cmd {
 | |
| 	lf := libName + "." + funcName
 | |
| 	args := []interface{}{"TFCALL", lf, numKeys}
 | |
| 	if options != nil {
 | |
| 		for _, key := range options.Keys {
 | |
| 			args = append(args, key)
 | |
| 		}
 | |
| 		for _, key := range options.Arguments {
 | |
| 			args = append(args, key)
 | |
| 		}
 | |
| 	}
 | |
| 	cmd := NewCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // TFCallASYNC - invoke an asynchronous JavaScript function (coroutine).
 | |
| // For more information - https://redis.io/commands/TFCallASYNC/
 | |
| func (c cmdable) TFCallASYNC(ctx context.Context, libName string, funcName string, numKeys int) *Cmd {
 | |
| 	lf := fmt.Sprintf("%s.%s", libName, funcName)
 | |
| 	args := []interface{}{"TFCALLASYNC", lf, numKeys}
 | |
| 	cmd := NewCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) TFCallASYNCArgs(ctx context.Context, libName string, funcName string, numKeys int, options *TFCallOptions) *Cmd {
 | |
| 	lf := fmt.Sprintf("%s.%s", libName, funcName)
 | |
| 	args := []interface{}{"TFCALLASYNC", lf, numKeys}
 | |
| 	if options != nil {
 | |
| 		for _, key := range options.Keys {
 | |
| 			args = append(args, key)
 | |
| 		}
 | |
| 		for _, key := range options.Arguments {
 | |
| 			args = append(args, key)
 | |
| 		}
 | |
| 	}
 | |
| 	cmd := NewCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 |