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

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

    let (file, submodule_id, module_id): (String, usize, usize) =
        try!(serde_json::from_str(&get_file_from_submodule_params).wrap_err_to_err());

    let path = try!(path_resolver.find_submodule_file_path(&file, module_id, submodule_id).wrap_err_to_err());
    let absolute_path = try!(fs::canonicalize(path).wrap_err_to_err());
    let result = absolute_path.to_string_lossy().into_owned();

    Ok(result)
}