Module rsjsonnet_lang::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 rsjsonnet_lang::program::Callbacks for Callbacks {
    fn import(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program,
        from: rsjsonnet_lang::span::SpanId,
        path: &str,
    ) -> Result<rsjsonnet_lang::program::Thunk, rsjsonnet_lang::program::ImportError> {
        unimplemented!();
    }

    fn import_str(
        &mut self,
        program: &mut rsjsonnet_lang::program::Program,
        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,
        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,
        message: &str,
        stack: &[rsjsonnet_lang::program::EvalStackTraceItem],
    ) {
        unimplemented!();
    }

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

// Create the program state.
let mut program = rsjsonnet_lang::program::Program::new();
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§

Enums§

Traits§

  • Trait to customize the behavior of operations during evaluation.