use std::cell::RefCell; use std::convert::Infallible; use std::rc::Rc; use std::sync::Arc; use avril_caps::Capabilities; use avril_core::Op; use avril_host::environment::Environment; use avril_host::io::response; pub fn ops(caps: Arc, environment: Rc>) -> Vec { vec![ Op::new("op_env_get", { let caps = caps.clone(); let environment = environment.clone(); move |name: String| { Ok::<_, Infallible>(response(environment.borrow().get(&caps, &name))) } }), Op::new("op_env_set", { let caps = caps.clone(); let environment = environment.clone(); move |(name, value): (String, String)| { Ok::<_, Infallible>(response(environment.borrow_mut().set(&caps, &name, value))) } }), Op::new("op_env_delete", { let caps = caps.clone(); let environment = environment.clone(); move |name: String| { Ok::<_, Infallible>(response(environment.borrow_mut().delete(&caps, &name))) } }), Op::new("op_env_to_object", move |(): ()| { Ok::<_, Infallible>(environment.borrow().to_object(&caps)) }), ] }