systemconfiguration-rs 0.2.1

Safe Rust bindings for Apple's SystemConfiguration framework via a Swift bridge on macOS
Documentation
#![allow(dead_code)]

use std::{fs, path::PathBuf, time::{SystemTime, UNIX_EPOCH}};

use systemconfiguration::Preferences;

pub fn fixture_dir() -> PathBuf {
    let dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("target/test-data");
    fs::create_dir_all(&dir).expect("failed to create target/test-data");
    dir
}

pub fn unique_prefs_path(name: &str) -> PathBuf {
    let nanos = SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .expect("time went backwards")
        .as_nanos();
    fixture_dir().join(format!("{name}-{nanos}.plist"))
}

pub fn temporary_preferences(name: &str) -> Preferences {
    let path = unique_prefs_path(name);
    Preferences::new("systemconfiguration-rs-tests", Some(path.to_string_lossy().as_ref()))
        .expect("failed to create temporary preferences")
}