learnwy_bin_utils 0.2.0

self use
use crate::utils::date::date_time_str;
use std::fs::OpenOptions;
use std::io::Write;
use std::path::PathBuf;

pub fn app_dir() -> Option<PathBuf> {
    let home_dir = dirs::home_dir();
    match home_dir {
        Some(h) => {
            let dir = h.join(".learnwy");
            std::fs::create_dir_all(dir.clone());
            Some(dir)
        }
        _ => None,
    }
}

pub fn write_append_file(p: PathBuf, content: &[u8]) {
    let parent = p.parent().unwrap();
    std::fs::create_dir_all(parent);
    OpenOptions::new()
        .create(true)
        .write(true)
        .append(true)
        .open(p.clone())
        .unwrap()
        .write(content);
}

pub fn write_file(p: PathBuf, content: &[u8]) {
    let parent = p.parent().unwrap();
    std::fs::create_dir_all(parent);
    OpenOptions::new().create(true).write(true).open(p.clone()).unwrap().write(content);
}

pub fn write_append_date_time_file(sub: String, d_ext: String, content: &[u8]) -> Option<PathBuf> {
    match app_dir() {
        Some(h) => {
            let p = h.join(sub).join(date_time_str() + d_ext.as_str());
            if p.exists() {
                None
            } else {
                write_append_file(p.clone(), content);
                Some(p)
            }
        }
        None => None,
    }
}