use crate::commands;
use clap::Subcommand;
#[derive(Subcommand)]
pub enum ConversionCommands {
ToJson {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
#[arg(long)]
metadata: bool,
#[arg(short, long)]
pretty: bool,
},
FromJson {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
ToYaml {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
FromYaml {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
ToXml {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long)]
pretty: bool,
},
FromXml {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
ToCsv {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
#[arg(long, default_value = "true")]
headers: bool,
},
FromCsv {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long, default_value = "Row")]
type_name: String,
},
ToParquet {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: String,
},
FromParquet {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
ToToon {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
FromToon {
#[arg(value_name = "FILE")]
file: String,
#[arg(short, long)]
output: Option<String>,
},
}
impl ConversionCommands {
pub fn execute(self) -> Result<(), crate::error::CliError> {
match self {
ConversionCommands::ToJson {
file,
output,
metadata,
pretty,
} => commands::to_json(&file, output.as_deref(), metadata, pretty),
ConversionCommands::FromJson { file, output } => {
commands::from_json(&file, output.as_deref())
}
ConversionCommands::ToYaml { file, output } => {
commands::to_yaml(&file, output.as_deref())
}
ConversionCommands::FromYaml { file, output } => {
commands::from_yaml(&file, output.as_deref())
}
ConversionCommands::ToXml {
file,
output,
pretty,
} => commands::to_xml(&file, output.as_deref(), pretty),
ConversionCommands::FromXml { file, output } => {
commands::from_xml(&file, output.as_deref())
}
ConversionCommands::ToCsv {
file,
output,
headers,
} => commands::to_csv(&file, output.as_deref(), headers),
ConversionCommands::FromCsv {
file,
output,
type_name,
} => commands::from_csv(&file, output.as_deref(), &type_name),
ConversionCommands::ToParquet { file, output } => commands::to_parquet(&file, &output),
ConversionCommands::FromParquet { file, output } => {
commands::from_parquet(&file, output.as_deref())
}
ConversionCommands::ToToon { file, output } => {
commands::to_toon(&file, output.as_deref())
}
ConversionCommands::FromToon { file, output } => {
commands::from_toon(&file, output.as_deref())
}
}
}
}