Skip to content

Commit 51bf30e

Browse files
committed
add windows support
1 parent a101c93 commit 51bf30e

File tree

1 file changed

+18
-3
lines changed
  • rustler_tests/native/dynamic_load/src

1 file changed

+18
-3
lines changed

rustler_tests/native/dynamic_load/src/lib.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
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};
33

44
static mut DATASET: Option<Box<str>> = None;
55

@@ -29,12 +29,27 @@ fn load<'a>(env: rustler::Env<'a>, args: rustler::Term<'a>) -> bool {
2929
let key = Atom::from_str(env, "priv_path").unwrap().to_term(env);
3030
let priv_path = args.map_get(key).unwrap();
3131
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);
3434

3535
initialize_dataset(asset_path);
3636

3737
true
3838
}
3939

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+
4055
rustler::init!("Elixir.DynamicData", [get_dataset], load = load);

0 commit comments

Comments
 (0)