1use pklrust::{EvaluatorManager, EvaluatorOptions, ModuleSource};
3use serde::Deserialize;
4
5#[derive(Debug, Deserialize)]
6struct AppConfig {
7 name: String,
8 version: String,
9 server: ServerConfig,
10 features: Vec<String>,
11}
12
13#[derive(Debug, Deserialize)]
14struct ServerConfig {
15 host: String,
16 port: u16,
17 #[serde(rename = "maxConnections")]
18 max_connections: u32,
19}
20
21fn main() -> Result<(), Box<dyn std::error::Error>> {
22 let mut manager = EvaluatorManager::new()?;
23 let evaluator = manager.new_evaluator(EvaluatorOptions::preconfigured())?;
24
25 let source = ModuleSource::text(
26 r#"
27 name = "my-service"
28 version = "2.1.0"
29 server {
30 host = "0.0.0.0"
31 port = 8443
32 maxConnections = 100
33 }
34 features = new Listing {
35 "auth"
36 "logging"
37 "metrics"
38 }
39 "#,
40 );
41
42 let config: AppConfig = manager.evaluate_module_typed(&evaluator, source)?;
43 println!("App: {} v{}", config.name, config.version);
44 println!("Server: {}:{}", config.server.host, config.server.port);
45 println!("Max connections: {}", config.server.max_connections);
46 println!("Features: {:?}", config.features);
47
48 manager.close_evaluator(&evaluator)?;
49 Ok(())
50}