rustybook-utilities 0.0.2

Utilities lib for RustyBook
Documentation
use std::path::Path;

use rustybook_errors::WriteError;
use tokio::fs;
use tokio::io::AsyncWriteExt;
use uuid::Uuid;

/// Safely writes text into file
pub async fn write_text(text: &str, path: impl AsRef<Path>) -> Result<(), WriteError> {
    let path = path.as_ref();

    if let Some(parent) = path.parent() {
        fs::create_dir_all(parent).await?;
    }

    let tmp_path = path.with_extension(format!("tmp-{}", Uuid::new_v4()));

    let mut file = fs::File::create(&tmp_path).await?;
    file.write_all(text.as_bytes()).await?;
    file.flush().await?;
    file.sync_all().await?;

    fs::rename(&tmp_path, path).await?;

    Ok(())
}