mll-axum-utils 0.2.1

一个 Axum 的工具库
use color_string::{pcs, Colored, Font::*};
use std::{
    fs::{self, File},
    net::{Ipv4Addr, SocketAddr},
    path::Path,
};

pub fn echo_ip_addrs(addr: &SocketAddr) {
    let mut ips = vec![addr.ip()];
    if addr.ip() == Ipv4Addr::new(0, 0, 0, 0) {
        if let Ok(vec) = if_addrs::get_if_addrs() {
            let mut vec: Vec<_> = vec.into_iter().map(|m| m.ip()).collect();
            vec.sort_by_key(|a| !a.is_loopback());
            ips = vec;
        }
    }

    let port = addr.port().bold();
    for ip in ips.iter().filter(|f| f.is_ipv4()) {
        if ip.is_loopback() {
            pcs!(Green => ""; RBold => "Local:   "; RCyan => format!("http://{ip}:{port}"));
        } else {
            pcs!(Green => ""; RBold => "Network: "; RCyan => format!("http://{ip}:{port}"));
        }
    }
}

#[test]
fn echo_ip_addrs_t() {
    echo_ip_addrs(&"0.0.0.0:5173".parse().unwrap());
}

/// 创建日志文件并给定对应权限
pub fn create_log_file(path: String) -> File {
    if let Some(p) = Path::new(&path).parent() {
        fs::create_dir_all(p).expect("自动创建日志文件父级目录失败")
    }

    File::options()
        .create(true)
        .append(true)
        .write(true)
        .open(path)
        .expect("日志文件创建失败")
}