use std::env;
use std::path::Path;
use std::process;
#[derive(Debug)]
pub struct CliConfig {
pub input_file: String,
pub output_format: OutputFormat,
}
#[derive(Debug)]
pub enum OutputFormat {
Json,
}
impl CliConfig {
pub fn from_args() -> Self {
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
Self::print_usage(&args[0]);
process::exit(1);
}
let input_file = args[1].clone();
if !Path::new(&input_file).exists() {
eprintln!("❌ 错误: 日志文件不存在: {}", input_file);
process::exit(1);
}
Self {
input_file,
output_format: OutputFormat::Json, }
}
fn print_usage(program_name: &str) {
eprintln!("📖 PostfixLogParser - 高性能Postfix日志解析工具");
eprintln!();
eprintln!("用法:");
eprintln!(" {} <日志文件路径>", program_name);
eprintln!();
eprintln!("示例:");
eprintln!(" {} /var/log/mail.log", program_name);
eprintln!(" {} logs/postfix.log", program_name);
eprintln!(" {} /path/to/mail.log", program_name);
eprintln!();
eprintln!("特性:");
eprintln!(" ✅ 支持完整的SMTPD事件解析");
eprintln!(" ✅ 高性能正则表达式优化");
eprintln!(" ✅ JSON格式输出");
eprintln!(" ✅ 详细的事件字段提取");
eprintln!();
eprintln!("输出: 结构化JSON格式的解析结果");
}
}