MCPcopy Create free account
hub / github.com/TomWright/dasel / rangeExprExecutor

Function rangeExprExecutor

execution/execute_array.go:42–88  ·  view source on GitHub ↗
(e ast.RangeExpr)

Source from the content-addressed store, hash-verified

40}
41
42func rangeExprExecutor(e ast.RangeExpr) (expressionExecutor, error) {
43 return func(ctx context.Context, options *Options, data *model.Value) (*model.Value, error) {
44 ctx = WithExecutorID(ctx, "rangeExpr")
45 var start, end int64 = 0, -1
46 if e.Start != nil {
47 startE, err := ExecuteAST(ctx, e.Start, data, options)
48 if err != nil {
49 return nil, fmt.Errorf("error evaluating start expression: %w", err)
50 }
51
52 start, err = startE.IntValue()
53 if err != nil {
54 return nil, fmt.Errorf("error getting start int value: %w", err)
55 }
56 }
57
58 if e.End != nil {
59 endE, err := ExecuteAST(ctx, e.End, data, options)
60 if err != nil {
61 return nil, fmt.Errorf("error evaluating end expression: %w", err)
62 }
63
64 end, err = endE.IntValue()
65 if err != nil {
66 return nil, fmt.Errorf("error getting end int value: %w", err)
67 }
68 }
69
70 var res *model.Value
71 var err error
72
73 switch data.Type() {
74 case model.TypeString:
75 res, err = data.StringIndexRange(int(start), int(end))
76 case model.TypeSlice:
77 res, err = data.SliceIndexRange(int(start), int(end))
78 default:
79 err = fmt.Errorf("range expects a slice or string, got %s", data.Type())
80 }
81
82 if err != nil {
83 return nil, err
84 }
85
86 return res, nil
87 }, nil
88}
89
90func indexExprExecutor(e ast.IndexExpr) (expressionExecutor, error) {
91 return func(ctx context.Context, options *Options, data *model.Value) (*model.Value, error) {

Callers 1

exprExecutorFunction · 0.85

Calls 6

WithExecutorIDFunction · 0.85
ExecuteASTFunction · 0.85
IntValueMethod · 0.80
TypeMethod · 0.80
StringIndexRangeMethod · 0.80
SliceIndexRangeMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…