zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use std::fs;
use std::os::unix::fs::PermissionsExt;

pub fn file_exists(file_path: &str) -> bool {
    if file_path.is_empty() {
        return false;
    }
    // std::path::Path::new(file_path).exists()
    std::fs::metadata(file_path).is_ok()
}

// 系统临时文件夹
pub fn temp_dir() -> std::string::String {
    std::env::temp_dir().as_path().display().to_string()
}

// pub fn temp_upload_folder(server_name: &str) -> String {
//     let path = std::path::Path::new(&temp_folder(server_name))
//         .join("uploads")
//         .display()
//         .to_string();

//     if !file_exists(&path) {
//         fs::create_dir_all(&path).unwrap();

//         // 0o700:只有所有者可读写执行
//         // 0o755:所有者可读写执行,组和其他用户可读执行
//         // 0o777:所有人可读写执行(不安全,一般避免)
//         let mut perms = fs::metadata(&path).unwrap().permissions();
//         perms.set_mode(0o777); // 读写执行权限

//         fs::set_permissions(&path, perms).unwrap();
//     }

//     path
// }

pub fn temp_folder(server_name: &str) -> String {
    let path = std::path::Path::new(&temp_dir())
        .join(format!("{}_tmp", server_name))
        // .join("temp_dir")
        .display()
        .to_string();

    if !file_exists(&path) {
        fs::create_dir_all(&path).unwrap();

        // 0o700:只有所有者可读写执行
        // 0o755:所有者可读写执行,组和其他用户可读执行
        // 0o777:所有人可读写执行(不安全,一般避免)
        let mut perms = fs::metadata(&path).unwrap().permissions();
        perms.set_mode(0o777); // 读写执行权限

        fs::set_permissions(&path, perms).unwrap();
    }

    path
}

pub fn upload_folder() -> String {
    let app_name = crate::commons::read_env("APP_NAME", "APP_NAME_UNSET");

    let path = std::path::Path::new(&temp_folder(&app_name))
        .join("uploads")
        .display()
        .to_string();

    if !file_exists(&path) {
        std::fs::create_dir_all(&path).unwrap();
    }

    path
}

pub fn join_folder(dir: &str, dir1: &str) -> String {
    let path = std::path::Path::new(dir).join(dir1).display().to_string();

    if !file_exists(&path) {
        std::fs::create_dir_all(&path).unwrap();
    }

    path
}

pub fn join_path(dir: &str, dir1: &str) -> String {
    let path = std::path::Path::new(dir).join(dir1).display().to_string();

    path
}