mica/corelib/
pair.rs

1use crate::{ll::value::RawValue, Engine, Error, TypeBuilder, UserData};
2
3/// A pair of two raw values.
4#[derive(Debug, Clone, Copy)]
5pub struct Pair {
6    /// The first value.
7    pub a: RawValue,
8    /// The second value.
9    pub b: RawValue,
10}
11
12pub(crate) fn load_pair(engine: &mut Engine) -> Result<(), Error> {
13    engine.add_type(
14        TypeBuilder::<Pair>::new("Pair")
15            .add_static("new", |a: RawValue, b: RawValue| Pair { a, b })
16            .add_function("first", |pair: &Pair| pair.a)
17            .add_function("key", |pair: &Pair| pair.a)
18            .add_function("left", |pair: &Pair| pair.a)
19            .add_function("second", |pair: &Pair| pair.b)
20            .add_function("value", |pair: &Pair| pair.b)
21            .add_function("right", |pair: &Pair| pair.b),
22    )?;
23    engine.add_function("pair", |a: RawValue, b: RawValue| Pair { a, b })?;
24
25    Ok(())
26}
27
28impl UserData for Pair {
29    fn visit_references(&self, visit: &mut dyn FnMut(RawValue)) {
30        visit(self.a);
31        visit(self.b);
32    }
33}