pub mod dirs;
pub mod geo2d;
pub mod geo3d;
pub mod lab;
pub mod ops;
mod array;
mod color;
mod debug;
mod import;
mod log;
mod math;
mod string;
use microcad_builtin_proc_macros::builtin_mod;
pub use microcad_lang::builtin::{
Exporter, ExporterAccess, ExporterRegistry, Importer, ImporterRegistry, ModuleBuilder, Symbol,
};
#[builtin_mod]
pub mod __builtin {
pub use crate::array::array;
pub use crate::color::color;
pub use crate::debug::debug;
pub use crate::geo2d::geo2d;
pub use crate::geo3d::geo3d;
pub use crate::import::import;
pub use crate::lab::lab;
pub use crate::log::log;
pub use crate::math::math;
pub use crate::ops::ops;
pub use crate::string::string;
use microcad_lang::{eval::EvalResult, symbol::Symbol, ty::Ty, value::Value};
pub fn type_of() -> Symbol {
Symbol::new_builtin_fn(
"type_of",
[].into_iter(),
&|_, args, _| {
Ok(if let Ok((_, arg)) = args.get_single() {
arg.value.ty().to_string().into()
} else {
Value::None
})
},
None,
)
}
pub fn to_string() -> Symbol {
Symbol::new_builtin_fn(
"to_string",
[].into_iter(),
&|_, args, _| {
Ok(if let Ok((_, arg)) = args.get_single() {
arg.value.to_string().into()
} else {
Value::None
})
},
None,
)
}
pub fn print() -> Symbol {
Symbol::new_builtin_fn(
"print",
[microcad_lang::parameter!(x)].into_iter(),
&|_params, args, context| {
args.iter().try_for_each(|(_, arg)| -> EvalResult<()> {
context.print(format!("{value}", value = arg.value));
Ok(())
})?;
Ok(Value::None)
},
None,
)
}
}
pub use __builtin as builtin_module;
pub fn builtin_importers() -> ImporterRegistry {
ImporterRegistry::default().insert(microcad_import::toml::TomlImporter)
}
pub fn builtin_exporters() -> ExporterRegistry {
use microcad_export::*;
ExporterRegistry::new()
.insert(svg::SvgExporter)
.insert(stl::StlExporter)
.insert(json::JsonExporter)
.insert(wkt::WktExporter)
}