repl

package
v0.4.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 14, 2017 License: Apache-2.0 Imports: 16 Imported by: 22

Documentation

Overview

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.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ErrCode added in v0.2.2

type ErrCode int

ErrCode represents the collection of errors that may be returned by the REPL.

const (
	// BadArgsErr indicates bad arguments were provided to a built-in REPL
	// command.
	BadArgsErr ErrCode = iota
)

type Error added in v0.2.2

type Error struct {
	Code    ErrCode
	Message string
}

Error is the error type returned by the REPL.

func (*Error) Error added in v0.2.2

func (err *Error) Error() string

type REPL

type REPL struct {
	// contains filtered or unexported fields
}

REPL represents an instance of the interactive shell.

func New

func New(store *storage.Storage, historyPath string, output io.Writer, outputFormat string, banner string) *REPL

New returns a new instance of the REPL.

func (*REPL) DisableMultiLineBuffering added in v0.2.2

func (r *REPL) DisableMultiLineBuffering(yes bool) *REPL

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 added in v0.2.2

func (r *REPL) DisableUndefinedOutput(yes bool) *REPL

DisableUndefinedOutput causes the REPL to not print any output when the query is undefined.

func (*REPL) Loop

func (r *REPL) Loop(ctx context.Context)

Loop will run until the user enters "exit", Ctrl+C, Ctrl+D, or an unexpected error occurs.

func (*REPL) OneShot

func (r *REPL) OneShot(ctx context.Context, line string) error

OneShot evaluates the line and prints the result. If an error occurs it is returned for the caller to display.

Example
package main

import (
	"bytes"
	"context"
	"fmt"

	"github.com/open-policy-agent/opa/repl"
	"github.com/open-policy-agent/opa/storage"
)

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 := storage.New(storage.InMemoryConfig())

	// Create a buffer that will receive REPL output.
	var buf bytes.Buffer

	// Create a new REPL.
	repl := repl.New(store, "", &buf, "json", "")

	// 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:

true

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL