simple/
simple.rs

1#![cfg_attr(feature = "nightly", feature(min_specialization))]
2
3use std::borrow::Cow;
4use typed_eval::{Compiler, EvalType, eval_type_methods};
5
6#[derive(EvalType)]
7struct User {
8    name: String,
9    age: i64,
10}
11
12#[eval_type_methods]
13impl User {
14    fn greet(&self) -> Cow<'_, str> {
15        format!("Hello, {}", self.name).into()
16    }
17}
18
19#[derive(EvalType)]
20#[typed_eval(no_methods)]
21struct Context {
22    user: User,
23}
24
25fn main() {
26    let compiler = Compiler::new().unwrap();
27
28    let greet_user = compiler.compile::<String>("user.greet()").unwrap();
29    let double_age = compiler.compile::<i64>("user.age * 2").unwrap();
30
31    let context = Context {
32        user: User {
33            name: "Bob".into(),
34            age: 45,
35        },
36    };
37
38    assert_eq!(greet_user(&context), "Hello, Bob");
39    assert_eq!(double_age(&context), 90);
40}