diamond 0.1.0

Common library for diamond, just a daemon
Documentation
use std::path::PathBuf;

use thiserror::Error;

pub fn user_uds_path() -> Result<PathBuf, UserUdsPathError> {
    #[cfg(unix)]
    {
        use std::env::home_dir;

        let home = home_dir().ok_or(UserUdsPathError::MissingHome)?;
        let path = home
            .join(".local")
            .join("var")
            .join("run")
            .join("diamond.sock");
        Ok(path)
    }
    #[cfg(windows)]
    {
        use std::env::var;

        let user = var("USERNAME")?;
        let path = PathBuf::from("\\\\.\\pipe")
            .join("diamond-user")
            .join(user)
            .join("api.sock");
        Ok(path)
    }
}

#[derive(Debug, Error)]
pub enum UserUdsPathError {
    #[cfg(unix)]
    #[error("no home directory for the user")]
    MissingHome,
    #[cfg(windows)]
    #[error(transparent)]
    Username(#[from] std::env::VarError),
}

pub fn system_uds_path() -> PathBuf {
    #[cfg(unix)]
    {
        "/var/run/diamond.sock".into()
    }
    #[cfg(windows)]
    {
        "\\\\.\\pipe\\diamond-system\\api.sock".into()
    }
}