use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "yufmath")]
#[command(about = "一个基于 Rust 的高性能计算机代数系统")]
#[command(version)]
pub struct CliArgs {
#[command(subcommand)]
pub command: Option<Commands>,
#[arg(short, long, value_enum, default_value = "standard")]
pub format: OutputFormat,
#[arg(short, long)]
pub precision: Option<usize>,
#[arg(short, long)]
pub verbose: bool,
#[arg(short, long)]
pub quiet: bool,
#[arg(long)]
pub progress: bool,
#[arg(long)]
pub no_progress: bool,
#[arg(long)]
pub timeout: Option<u64>,
}
#[derive(Subcommand)]
pub enum Commands {
Compute {
expression: String,
},
Simplify {
expression: String,
},
Diff {
expression: String,
variable: String,
},
Integrate {
expression: String,
variable: String,
},
Solve {
equation: String,
variable: String,
},
Factor {
expression: String,
},
Expand {
expression: String,
},
Limit {
expression: String,
variable: String,
point: String,
},
Series {
expression: String,
variable: String,
point: String,
#[arg(short, long, default_value = "5")]
order: usize,
},
Batch {
#[arg(short, long)]
input: String,
#[arg(short, long)]
output: Option<String>,
},
Interactive,
Notepad {
file: Option<String>,
#[arg(short, long)]
title: Option<String>,
#[arg(long)]
terminal: bool,
},
}
#[derive(clap::ValueEnum, Clone, Debug)]
pub enum OutputFormat {
Standard,
Latex,
Mathml,
}