runestick/modules/
object.rs1use crate::{ContextError, Iterator, Module, Object, Protocol, Value};
4
5pub fn module() -> Result<Module, ContextError> {
7 let mut module = Module::with_crate_item("std", &["object"]);
8
9 module.ty::<Object>()?;
10
11 module.inst_fn("len", Object::len)?;
12 module.inst_fn("insert", Object::insert)?;
13 module.inst_fn("clear", Object::clear)?;
14 module.inst_fn("contains_key", contains_key)?;
15 module.inst_fn("get", get)?;
16
17 module.inst_fn("iter", Object::into_iterator)?;
18 module.inst_fn(Protocol::INTO_ITER, Object::into_iterator)?;
19 module.inst_fn("keys", keys)?;
20 module.inst_fn("values", values)?;
21 Ok(module)
22}
23
24fn contains_key(object: &Object, key: &str) -> bool {
25 object.contains_key(key)
26}
27
28fn get(object: &Object, key: &str) -> Option<Value> {
29 object.get(key).cloned()
30}
31
32fn keys(object: &Object) -> Iterator {
33 let iter = object.keys().cloned().collect::<Vec<_>>().into_iter();
34 Iterator::from_double_ended("std::object::Keys", iter)
35}
36
37fn values(object: &Object) -> Iterator {
38 let iter = object.values().cloned().collect::<Vec<_>>().into_iter();
39 Iterator::from_double_ended("std::object::Values", iter)
40}