[][src]Function gluon::import::add_extern_module

pub fn add_extern_module<F>(thread: &Thread, name: &str, loader: F) where
    F: FnMut(&Thread) -> Result<ExternModule> + Send + Sync + 'static, 

Adds an extern module to thread, letting it be loaded with import! name from gluon code.

extern crate gluon;
#[macro_use]
extern crate gluon_vm;

use gluon::vm::{self, ExternModule};
use gluon::{Compiler, Thread};
use gluon::import::add_extern_module;

fn yell(s: &str) -> String {
    s.to_uppercase()
}

fn my_module(thread: &Thread) -> vm::Result<ExternModule> {
    ExternModule::new(
        thread,
        record!{
            message => "Hello World!",
            yell => primitive!(1, yell)
        }
    )
}

fn main_() -> gluon::Result<()> {
    let thread = gluon::new_vm();
    add_extern_module(&thread, "my_module", my_module);
    let script = r#"
        let module = import! "my_module"
        module.yell module.message
    "#;
    let (result, _) = Compiler::new().run_expr::<String>(&thread, "example", script)?;
    assert_eq!(result, "HELLO WORLD!");
    Ok(())
}
fn main() {
    if let Err(err) = main_() {
        panic!("{}", err)
    }
}