1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//! The Mica core library. Provides the fundamental set of functions and types.

use self::{builtins::*, core::load_core};
use crate::{
    ll::value::{Dict, RawValue},
    CoreLibrary, Engine, Error, TypeBuilder,
};

mod builtins;
mod core;
mod gc;
mod iterators;
mod pair;

pub use pair::*;

/// Unit struct representing the core library.
#[derive(Debug, Clone, Copy)]
pub struct Lib;

impl CoreLibrary for Lib {
    fn define_nil(&mut self, builder: TypeBuilder<()>) -> TypeBuilder<()> {
        builder
    }

    fn define_boolean(&mut self, builder: TypeBuilder<bool>) -> TypeBuilder<bool> {
        builder
    }

    fn define_number(&mut self, builder: TypeBuilder<f64>) -> TypeBuilder<f64> {
        number::define(builder)
    }

    fn define_string(&mut self, builder: TypeBuilder<String>) -> TypeBuilder<String> {
        string::define(builder)
    }

    fn define_list(&mut self, builder: TypeBuilder<Vec<RawValue>>) -> TypeBuilder<Vec<RawValue>> {
        list::define(builder)
    }

    fn define_dict(&mut self, builder: TypeBuilder<Dict>) -> TypeBuilder<Dict> {
        dict::define(builder)
    }

    fn load(&mut self, engine: &mut Engine) -> Result<(), Error> {
        load_core(engine)
    }
}