1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use appscraps_dll_error::Result as FuncResult;
use appscraps_dll_error::WrapErr;
use appscraps_static::ENVIRONMENT;
use serde_json;

#[no_mangle]
pub extern fn get_modules_with_submodule(submodule_id: &str) -> FuncResult<String> {
    let environment = try!(ENVIRONMENT.get().wrap_err_to_err());
    let module_list = environment.get_module_list();
    let path_resolver = environment.get_path_resolver();

    let submodule_id: usize = try!(submodule_id.parse().wrap_err_to_err());

    let mut result = Vec::new();
    for module in module_list {
        let module_id = module.get_index();
        if try!(path_resolver.has_submodule(module_id, submodule_id).wrap_err_to_err()) {
            result.push(module_id);
        }
    }

    let result = try!(serde_json::to_string(&result).wrap_err_to_err());
    Ok(result)
}