|
1 | 1 | use rustler::Atom;
|
2 |
| -use std::{ffi::OsStr, fs::read_to_string, os::unix::prelude::OsStrExt, path::PathBuf}; |
| 2 | +use std::{ffi::OsStr, fs::read_to_string, path::PathBuf}; |
3 | 3 |
|
4 | 4 | static mut DATASET: Option<Box<str>> = None;
|
5 | 5 |
|
@@ -29,12 +29,27 @@ fn load<'a>(env: rustler::Env<'a>, args: rustler::Term<'a>) -> bool {
|
29 | 29 | let key = Atom::from_str(env, "priv_path").unwrap().to_term(env);
|
30 | 30 | let priv_path = args.map_get(key).unwrap();
|
31 | 31 | let priv_path = priv_path.into_binary().unwrap().as_slice();
|
32 |
| - let priv_path = OsStr::from_bytes(priv_path); |
33 |
| - let asset_path = PathBuf::from(priv_path); |
| 32 | + |
| 33 | + let asset_path = build_path_buf(priv_path); |
34 | 34 |
|
35 | 35 | initialize_dataset(asset_path);
|
36 | 36 |
|
37 | 37 | true
|
38 | 38 | }
|
39 | 39 |
|
| 40 | +#[cfg(unix)] |
| 41 | +fn build_path_buf(priv_path: &[u8]) -> PathBuf { |
| 42 | + use std::os::unix::prelude::OsStrExt; |
| 43 | + |
| 44 | + let priv_path = OsStr::from_bytes(priv_path); |
| 45 | + PathBuf::from(priv_path) |
| 46 | +} |
| 47 | + |
| 48 | +#[cfg(windows)] |
| 49 | +fn build_path_buf(priv_path: &[u8]) -> PathBuf { |
| 50 | + let string_slice = std::str::from_utf8(priv_path).expect("Data is not valid UTF-8, we could decode it without valid UTF-8 requirements but lets not do that for now because its easier this way"); |
| 51 | + let priv_path = OsStr::new(string_slice); |
| 52 | + PathBuf::from(priv_path) |
| 53 | +} |
| 54 | + |
40 | 55 | rustler::init!("Elixir.DynamicData", [get_dataset], load = load);
|
0 commit comments