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§
- Error type that can be returned by
Callbacks::import,Callbacks::import_strandCallbacks::import_bin. - Error type that can be returned by
Callbacks::native_call. - Jsonnet program state and evaluator.
- A value that might not be evaluated yet.
- A fully evaluated value.
Enums§
Traits§
- Trait to customize the behavior of operations during evaluation.