use clap::Parser;
use kalkulator::Expression;
#[derive(Parser, Debug)]
#[command(
name = "kalkulator",
about = "kalkulator: A command line calculator written in Rust",
version = "0.2.2"
)]
pub struct Args {
#[arg(short, long)]
expr: Option<String>,
#[arg(short = 'p', long = "postfix", action = clap::ArgAction::SetTrue)]
to_postfix: bool,
#[arg(short = 's', long = "show-ops", action = clap::ArgAction::SetTrue)]
show_ops: bool,
}
fn main() {
let args = Args::parse();
if args.show_ops {
println!("Supported operators:");
println!("+ : Addition");
println!("- : Subtraction");
println!("* : Multiplication");
println!("/ : Division");
println!("^ : Exponentiation");
println!("& : Logical AND (integer operation)");
println!("| : Logical OR (integer operation)");
println!("~ : Logical XOR (integer operation)");
println!("! : Factorial");
return; }
if let Some(expression) = args.expr {
let trimmed_expression = expression.trim();
let mut obj = Expression::new(trimmed_expression);
match obj.process_expression(!args.to_postfix) {
Ok(_) => {} Err(e) => {
eprintln!("Error processing expression: {}", e.as_str());
}
}
} else if !args.show_ops {
eprintln!("No expression provided. Use --help for more information or --show-ops to list available operations.")
}
}