dmon 0.2.2

A library for building daemon processes.
Documentation
use std::{
    fs::File, io::Write, os::unix::fs::PermissionsExt, path::Path, process,
};

pub fn create(path: &Path) -> Result<(), String> {
    let mut file = File::options()
        .write(true)
        .create_new(true)
        .open(path)
        .map_err(|err| {
            format!("failed to create PID file '{}': {err}", path.display())
        })?;

    writeln!(file, "{}", process::id()).map_err(|err| {
        format!("failed to write PID to file '{}': {err}", path.display())
    })?;

    file.metadata()
        .map_err(|err| {
            format!(
                "failed to fetch PID file metadata '{}': {err}",
                path.display()
            )
        })?
        .permissions()
        .set_mode(0o644);

    file.sync_all().map_err(|err| {
        format!(
            "failed to sync PID file '{}' data to disk: {err}",
            path.display()
        )
    })?;

    Ok(())
}