in mito.go [426:453]
func run(prg cel.Program, ast *cel.Ast, fast bool, input interface{}) (string, any, *cel.EvalDetails, error) {
if input == nil {
input = interpreter.EmptyActivation()
}
out, det, err := prg.Eval(input)
if err != nil {
return "", nil, det, fmt.Errorf("failed eval: %v", lib.DecoratedError{AST: ast, Err: err})
}
v, err := out.ConvertToNative(reflect.TypeOf(&structpb.Value{}))
if err != nil {
return "", nil, det, fmt.Errorf("failed proto conversion: %v", err)
}
val := v.(*structpb.Value).AsInterface()
if fast {
b, err := protojson.MarshalOptions{}.Marshal(v.(proto.Message))
if err != nil {
return "", nil, det, fmt.Errorf("failed native conversion: %v", err)
}
return string(b), val, det, nil
}
var buf strings.Builder
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false)
enc.SetIndent("", "\t")
err = enc.Encode(val)
return strings.TrimRight(buf.String(), "\n"), val, det, err
}