pray-cli 1.16.0

Package manager for the language placed before inference — Prayfile CLI (binary: pray)
use pray_core::{PrayError, PrayResult};
use std::fs::{self, OpenOptions};
use std::io::Write;
use std::path::Path;
use std::time::{SystemTime, UNIX_EPOCH};

pub(crate) fn deliver_verification_code(root: &Path, email: &str, code: &str) -> PrayResult<()> {
    let directory = root.join(".pray");
    fs::create_dir_all(&directory)?;
    let path = directory.join("verification-deliveries.jsonl");
    let created_at = SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .map_err(|error| PrayError::Resolution(error.to_string()))?
        .as_secs();
    let line = serde_json::json!({
        "email": email,
        "code": code,
        "created_at": created_at,
    });
    let mut file = OpenOptions::new().create(true).append(true).open(&path)?;
    writeln!(file, "{line}").map_err(|error| PrayError::Resolution(error.to_string()))?;
    file.sync_all()?;
    #[cfg(unix)]
    {
        use std::os::unix::fs::PermissionsExt;
        fs::set_permissions(&path, fs::Permissions::from_mode(0o600))?;
    }
    eprintln!("verification delivered for {email}");
    Ok(())
}