1use crate::{ll::value::RawValue, Engine, Error, TypeBuilder, UserData};
2
3#[derive(Debug, Clone, Copy)]
5pub struct Pair {
6 pub a: RawValue,
8 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}