char/avril

(wip) why'd you have to go and make things so complicaaaaated?

git clone https://git.t4t.associates/char/avril

Charlotte Somrearrange libs into lib and extensions into extsf4a0f5b

main
1.3 KiB39 linesraw
1use std::cell::RefCell;
2use std::convert::Infallible;
3use std::rc::Rc;
4use std::sync::Arc;
5
6use avril_caps::Capabilities;
7use avril_core::Op;
8use avril_host::environment::Environment;
9
10use avril_host::io::response;
11
12pub fn ops(caps: Arc<Capabilities>, environment: Rc<RefCell<Environment>>) -> Vec<Op> {
13    vec![
14        Op::new("op_env_get", {
15            let caps = caps.clone();
16            let environment = environment.clone();
17            move |name: String| {
18                Ok::<_, Infallible>(response(environment.borrow().get(&caps, &name)))
19            }
20        }),
21        Op::new("op_env_set", {
22            let caps = caps.clone();
23            let environment = environment.clone();
24            move |(name, value): (String, String)| {
25                Ok::<_, Infallible>(response(environment.borrow_mut().set(&caps, &name, value)))
26            }
27        }),
28        Op::new("op_env_delete", {
29            let caps = caps.clone();
30            let environment = environment.clone();
31            move |name: String| {
32                Ok::<_, Infallible>(response(environment.borrow_mut().delete(&caps, &name)))
33            }
34        }),
35        Op::new("op_env_to_object", move |(): ()| {
36            Ok::<_, Infallible>(environment.borrow().to_object(&caps))
37        }),
38    ]
39}