airlang_bin 0.0.8

The Air Programming Language
use {
    crate::repl::eval::{
        ConstCtx,
        DynCtx,
        Output,
    },
    airlang::semantics::{
        parse,
        Val,
    },
};

pub(crate) fn import(const_ctx: &ConstCtx, dyn_ctx: &mut DynCtx, val: Val) -> Output {
    let Val::String(path) = val else {
        return Output::Err("import command only support string argument".into());
    };
    match std::fs::read_to_string(&*path) {
        Ok(input) => match parse(&input) {
            Ok(input) => const_ctx.eval(dyn_ctx, input),
            Err(err) => Output::Err(Box::new(err)),
        },
        Err(err) => Output::Err(Box::new(err)),
    }
}