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
use { file_funcs, string };
use libflo_error::{ Result as FuncResult, WrapErr };
use serialization::GuifastSerde;
use static_libflo::STATIC_LIBFLO;

#[no_mangle]
pub extern fn get() -> FuncResult<()> {
    let libflo = STATIC_LIBFLO.get().wrap_err_to_err()?;
    let module_mapper = libflo.get_module_mapper();
    let module_map = module_mapper.get_raw_map();
    let path_resolver = libflo.get_path_resolver();

    let self_module_id = module_mapper.get(string::self_module_name()).wrap_err_to_err()?;

    let mut result_guifast_modules = Vec::new();
    for (_, module_id) in module_map {
        if path_resolver.has_submodule(*module_id, self_module_id).wrap_err_to_err()? {
            let guifast_file = path_resolver.find_submodule_file_path(string::guifast_file(), *module_id, self_module_id).wrap_err_to_err()?;
            let mut guifast_serde = file_funcs::guifast_from_path(guifast_file).wrap_err_to_err()?;

            guifast_serde.canonicalize(*module_id, self_module_id, &path_resolver).wrap_err_to_err()?;
            result_guifast_modules.extend(guifast_serde.destructure());
        }
    }
    let result = GuifastSerde::new(result_guifast_modules);
    libflo.send_event_by_name(
        self_module_id,
        string::get(),
        &result
    ).wrap_err_to_err()
}