mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-13 03:42:35 -06:00
4cfcd8498d
Previously, output was being printed in the presentation package, REPL, and eval subcommand. Thes changes refactor the presentation package so that it can handle all of the output printing required by the REPL and the eval subcommand. These changes affect the 'json' output format in the REPL. Previously, the JSON output format would display either the expression value or bindings. With these changes, the 'json' output format in the REPL is the same as the one in the eval subcommand. Signed-off-by: Torin Sandall <torinsandall@gmail.com>
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
// Copyright 2016 The OPA Authors. All rights reserved.
|
|
// Use of this source code is governed by an Apache2
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package repl_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/open-policy-agent/opa/repl"
|
|
"github.com/open-policy-agent/opa/storage/inmem"
|
|
)
|
|
|
|
func ExampleREPL_OneShot() {
|
|
// Initialize context for the example. Normally the caller would obtain the
|
|
// context from an input parameter or instantiate their own.
|
|
ctx := context.Background()
|
|
|
|
// Instantiate the policy engine's storage layer.
|
|
store := inmem.New()
|
|
|
|
// Create a buffer that will receive REPL output.
|
|
var buf bytes.Buffer
|
|
|
|
// Create a new REPL.
|
|
repl := repl.New(store, "", &buf, "json", 0, "")
|
|
|
|
// Define a rule inside the REPL.
|
|
repl.OneShot(ctx, "p { a = [1, 2, 3, 4]; a[_] > 3 }")
|
|
|
|
// Query the rule defined above.
|
|
repl.OneShot(ctx, "p")
|
|
|
|
// Inspect the output. Defining rules does not produce output so we only expect
|
|
// output from the second line of input.
|
|
fmt.Println(buf.String())
|
|
|
|
// Output:
|
|
// {
|
|
// "result": [
|
|
// {
|
|
// "expressions": [
|
|
// {
|
|
// "value": true,
|
|
// "text": "p",
|
|
// "location": {
|
|
// "row": 1,
|
|
// "col": 1
|
|
// }
|
|
// }
|
|
// ]
|
|
// }
|
|
// ]
|
|
// }
|
|
}
|