1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
use libflo_error::{ Result as FuncResult, WrapErr };
use serde_json;
use static_libflo::STATIC_LIBFLO;

#[no_mangle]
pub extern fn get_file_from_submodules(get_file_from_submodules_params: &str) -> FuncResult<String> {
    let libflo = STATIC_LIBFLO.get().wrap_err_to_err()?;
    let path_resolver = libflo.get_path_resolver();

    let (file, submodule_id, module_ids): (String, usize, Vec<usize>) =
        serde_json::from_str(&get_file_from_submodules_params).wrap_err_to_err()?;

    let mut result = Vec::new();
    for module_id in module_ids {
        let path = path_resolver.find_submodule_file_path(&file, module_id, submodule_id).wrap_err_to_err()?;
        let path_string = path.to_string_lossy().into_owned();
        result.push((module_id, path_string));
    }

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