39 lines
1009 B
Rust
39 lines
1009 B
Rust
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(())
|
|
}
|