runestick/modules/
object.rs

1//! The `std::object` module.
2
3use crate::{ContextError, Iterator, Module, Object, Protocol, Value};
4
5/// Construct the `std::object` module.
6pub 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}