package repl
import "github.com/open-policy-agent/opa/repl"
Package repl implements a Read-Eval-Print-Loop (REPL) for interacting with the policy engine.
The REPL is typically used from the command line, however, it can also be used as a library. nolint: goconst // String reuse here doesn't make sense to deduplicate.
Index ¶
- Constants
- type Error
- type REPL
- func New(store storage.Store, historyPath string, output io.Writer, outputFormat string, errLimit int, banner string) *REPL
- func (r *REPL) DisableMultiLineBuffering(yes bool) *REPL
- func (r *REPL) DisableUndefinedOutput(yes bool) *REPL
- func (r *REPL) Loop(ctx context.Context)
- func (r *REPL) OneShot(ctx context.Context, line string) error
- func (r *REPL) SetOPAVersionReport(report [][2]string)
- func (r *REPL) WithRuntime(term *ast.Term) *REPL
- func (r *REPL) WithStderrWriter(w io.Writer) *REPL
Examples ¶
Constants ¶
const ( // BadArgsErr indicates bad arguments were provided to a built-in REPL // command. BadArgsErr string = "bad arguments" )
Types ¶
type Error ¶
Error is the error type returned by the REPL.
func (*Error) Error ¶
type REPL ¶
type REPL struct {
// contains filtered or unexported fields
}
REPL represents an instance of the interactive shell.
func New ¶
func New(store storage.Store, historyPath string, output io.Writer, outputFormat string, errLimit int, banner string) *REPL
New returns a new instance of the REPL.
func (*REPL) DisableMultiLineBuffering ¶
DisableMultiLineBuffering causes the REPL to not buffer lines when a parse error occurs. Instead, the error will be returned to the caller.
func (*REPL) DisableUndefinedOutput ¶
DisableUndefinedOutput causes the REPL to not print any output when the query is undefined.
func (*REPL) Loop ¶
Loop will run until the user enters "exit", Ctrl+C, Ctrl+D, or an unexpected error occurs.
func (*REPL) OneShot ¶
OneShot evaluates the line and prints the result. If an error occurs it is
returned for the caller to display.
nolint // example code
Code:play
Output:Example¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/open-policy-agent/opa/repl"
"github.com/open-policy-agent/opa/storage/inmem"
)
func main() {
// 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.
r := repl.New(store, "", &buf, "json", 0, "")
// Define a rule inside the REPL.
r.OneShot(ctx, "p { a = [1, 2, 3, 4]; a[_] > 3 }")
// Query the rule defined above.
r.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())
}
{
"result": [
{
"expressions": [
{
"value": true,
"text": "p",
"location": {
"row": 1,
"col": 1
}
}
]
}
]
}
func (*REPL) SetOPAVersionReport ¶
SetOPAVersionReport sets the information about the latest OPA release.
func (*REPL) WithRuntime ¶
WithRuntime sets the runtime data to provide to the evaluation engine.
func (*REPL) WithStderrWriter ¶
Source Files ¶
- Version
- v0.36.1
- Published
- Jan 13, 2022
- Platform
- js/wasm
- Imports
- 21 packages
- Last checked
- 2 minutes ago –
Tools for package owners.