Add host prelude embedding API
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
use decodal_core::{Data, EmptyLoader, Engine, HostValue};
|
||||
|
||||
fn main() -> decodal_core::Result<()> {
|
||||
let mut engine = Engine::new(EmptyLoader);
|
||||
|
||||
engine.bind_global(
|
||||
"Service",
|
||||
HostValue::object([
|
||||
("name", HostValue::string_type()),
|
||||
("port", HostValue::int_type().gt(443).default_int(8443)?),
|
||||
("enabled", HostValue::bool_type().default_bool(true)?),
|
||||
]),
|
||||
)?;
|
||||
|
||||
let module = engine.add_root_source(
|
||||
"embedded-main",
|
||||
"embedded-main",
|
||||
r#"
|
||||
Service & {
|
||||
name = "api";
|
||||
port = 9443;
|
||||
}
|
||||
"#,
|
||||
)?;
|
||||
|
||||
let value = engine.eval_module(module)?;
|
||||
let data = engine.materialize(&value)?;
|
||||
|
||||
if let Data::Object(fields) = data {
|
||||
assert_eq!(fields[0].value, Data::String(String::from("api")));
|
||||
assert_eq!(fields[1].value, Data::Int(9443));
|
||||
assert_eq!(fields[2].value, Data::Bool(true));
|
||||
} else {
|
||||
panic!("expected object");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user