(ctx expr.EvalContext, vals []value.Value)
| 184 | return subStringEval, nil |
| 185 | } |
| 186 | func subStringEval(ctx expr.EvalContext, vals []value.Value) (value.Value, bool) { |
| 187 | |
| 188 | if vals[0] == nil || vals[0].Err() || vals[0].Nil() { |
| 189 | return nil, false |
| 190 | } |
| 191 | if vals[1] == nil || vals[1].Err() || vals[1].Nil() { |
| 192 | return nil, false |
| 193 | } |
| 194 | |
| 195 | inputStr := vals[0].ToString() |
| 196 | |
| 197 | idx, ok := value.ValueToInt(vals[1]) |
| 198 | if !ok || idx < 0 { |
| 199 | return nil, false |
| 200 | } |
| 201 | if len(inputStr) < idx { |
| 202 | return nil, false |
| 203 | } |
| 204 | |
| 205 | if len(vals) == 3 { |
| 206 | idx2, ok := value.ValueToInt(vals[2]) |
| 207 | if !ok || idx2 < 0 { |
| 208 | return nil, false |
| 209 | } |
| 210 | if len(inputStr) < idx2 { |
| 211 | return nil, false |
| 212 | } |
| 213 | return value.NewStringValue(inputStr[idx:idx2]), true |
| 214 | } |
| 215 | |
| 216 | return value.NewStringValue(inputStr[idx:]), true |
| 217 | } |
| 218 | |
| 219 | // Strip a string, removing leading/trailing whitespace |
| 220 | // |
nothing calls this directly
no test coverage detected