func run()

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
}