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("日志文件创建失败")
}