Module program

Source
Expand description

Jsonnet program state and evaluation.

§Example

let source = b"local add_one(x) = x + 1; add_one(2)";

// Implement callbacks
struct Callbacks;

impl<'p> rsjsonnet_lang::program::Callbacks<'p> for Callbacks {
    fn import(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program<'p>,
        from: rsjsonnet_lang::span::SpanId,
        path: &str,
    ) -> Result<rsjsonnet_lang::program::Thunk<'p>, rsjsonnet_lang::program::ImportError>
    {
        unimplemented!();
    }

    fn import_str(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program<'p>,
        from: rsjsonnet_lang::span::SpanId,
        path: &str,
    ) -> Result<String, rsjsonnet_lang::program::ImportError> {
        unimplemented!();
    }

    fn import_bin(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program<'p>,
        from: rsjsonnet_lang::span::SpanId,
        path: &str,
    ) -> Result<Vec<u8>, rsjsonnet_lang::program::ImportError> {
        unimplemented!();
    }

    fn trace(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program<'p>,
        message: &str,
        stack: &[rsjsonnet_lang::program::EvalStackTraceItem],
    ) {
        unimplemented!();
    }

    fn native_call(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program<'p>,
        name: rsjsonnet_lang::interner::InternedStr<'p>,
        args: &[rsjsonnet_lang::program::Value<'p>],
    ) -> Result<rsjsonnet_lang::program::Value<'p>, rsjsonnet_lang::program::NativeError>
    {
        unimplemented!();
    }
}

// Create the program state.
let arena = rsjsonnet_lang::arena::Arena::new();
let mut program = rsjsonnet_lang::program::Program::new(&arena);
let mut callbacks = Callbacks;

// Import the source.
let (span_ctx, _) = program
    .span_manager_mut()
    .insert_source_context(source.len());
let thunk = program
    .load_source(span_ctx, source, true, "<example>")
    .unwrap();

// Evaluate it.
let value = program.eval_value(&thunk, &mut callbacks).unwrap();
assert_eq!(value.as_number(), Some(3.0));

Structs§

EvalError
ImportError
Error type that can be returned by Callbacks::import, Callbacks::import_str and Callbacks::import_bin.
NativeError
Error type that can be returned by Callbacks::native_call.
Program
Jsonnet program state and evaluator.
Thunk
A value that might not be evaluated yet.
Value
A fully evaluated value.

Enums§

AnalyzeError
EvalErrorKind
EvalErrorValueType
EvalStackTraceItem
LoadError
ValueKind

Traits§

Callbacks
Trait to customize the behavior of operations during evaluation.