Skip to main content

nils_test_support/
fs.rs

1use std::path::{Path, PathBuf};
2
3use serde::Serialize;
4
5fn ensure_parent_dir(path: &Path) {
6    if let Some(parent) = path.parent() {
7        std::fs::create_dir_all(parent).expect("mkdir");
8    }
9}
10
11pub fn write_text(path: &Path, contents: &str) -> PathBuf {
12    ensure_parent_dir(path);
13    std::fs::write(path, contents).expect("write text");
14    path.to_path_buf()
15}
16
17pub fn write_bytes(path: &Path, contents: &[u8]) -> PathBuf {
18    ensure_parent_dir(path);
19    std::fs::write(path, contents).expect("write bytes");
20    path.to_path_buf()
21}
22
23pub fn write_json<T: Serialize>(path: &Path, value: &T) -> PathBuf {
24    ensure_parent_dir(path);
25    let data = serde_json::to_vec_pretty(value).expect("json");
26    std::fs::write(path, data).expect("write json");
27    path.to_path_buf()
28}
29
30pub fn write_executable(path: &Path, contents: &str) -> PathBuf {
31    ensure_parent_dir(path);
32    std::fs::write(path, contents).expect("write executable");
33
34    #[cfg(unix)]
35    {
36        use std::os::unix::fs::PermissionsExt;
37        let mut perms = std::fs::metadata(path).expect("metadata").permissions();
38        perms.set_mode(0o755);
39        std::fs::set_permissions(path, perms).expect("set perms");
40    }
41
42    path.to_path_buf()
43}