use clap::{Parser, Subcommand};
use std::fs;
use std::path::PathBuf;
#[derive(Parser)]
#[command(
name = "sheeter",
version,
about = "Convert data files between formats"
)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
CsvToJson {
input: PathBuf,
output: PathBuf,
},
JsonToCsv {
input: PathBuf,
output: PathBuf,
},
TsvToJson {
input: PathBuf,
output: PathBuf,
},
JsonToTsv {
input: PathBuf,
output: PathBuf,
},
CsvToYaml { input: PathBuf, output: PathBuf },
TsvToYaml { input: PathBuf, output: PathBuf },
JsonToYaml { input: PathBuf, output: PathBuf },
YamlToCsv { input: PathBuf, output: PathBuf },
YamlToTsv { input: PathBuf, output: PathBuf },
YamlToJson { input: PathBuf, output: PathBuf },
CsvToTsv { input: PathBuf, output: PathBuf },
TsvToCsv { input: PathBuf, output: PathBuf },
XmlToJson { input: PathBuf, output: PathBuf },
JsonToXml { input: PathBuf, output: PathBuf },
CsvToXml { input: PathBuf, output: PathBuf },
TsvToXml { input: PathBuf, output: PathBuf },
YamlToXml { input: PathBuf, output: PathBuf },
XmlToCsv { input: PathBuf, output: PathBuf },
XmlToTsv { input: PathBuf, output: PathBuf },
XmlToYaml { input: PathBuf, output: PathBuf },
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let cli = Cli::parse();
match cli.command {
Commands::CsvToJson { input, output } => {
fs::write(
output,
sheeter_engine::csv_to_json(&fs::read_to_string(input)?)?,
)?;
}
Commands::JsonToCsv { input, output } => {
fs::write(
output,
sheeter_engine::json_to_csv(&fs::read_to_string(input)?)?,
)?;
}
Commands::TsvToJson { input, output } => {
fs::write(
output,
sheeter_engine::tsv_to_json(&fs::read_to_string(input)?)?,
)?;
}
Commands::JsonToTsv { input, output } => {
fs::write(
output,
sheeter_engine::json_to_tsv(&fs::read_to_string(input)?)?,
)?;
}
Commands::CsvToYaml { input, output } => {
fs::write(
output,
sheeter_engine::csv_to_yaml(&fs::read_to_string(input)?)?,
)?;
}
Commands::TsvToYaml { input, output } => {
fs::write(
output,
sheeter_engine::tsv_to_yaml(&fs::read_to_string(input)?)?,
)?;
}
Commands::JsonToYaml { input, output } => {
fs::write(
output,
sheeter_engine::json_to_yaml(&fs::read_to_string(input)?)?,
)?;
}
Commands::YamlToCsv { input, output } => {
fs::write(
output,
sheeter_engine::yaml_to_csv(&fs::read_to_string(input)?)?,
)?;
}
Commands::YamlToTsv { input, output } => {
fs::write(
output,
sheeter_engine::yaml_to_tsv(&fs::read_to_string(input)?)?,
)?;
}
Commands::YamlToJson { input, output } => {
fs::write(
output,
sheeter_engine::yaml_to_json(&fs::read_to_string(input)?)?,
)?;
}
Commands::CsvToTsv { input, output } => {
fs::write(
output,
sheeter_engine::csv_to_tsv(&fs::read_to_string(input)?)?,
)?;
}
Commands::TsvToCsv { input, output } => {
fs::write(
output,
sheeter_engine::tsv_to_csv(&fs::read_to_string(input)?)?,
)?;
}
Commands::XmlToJson { input, output } => {
fs::write(
output,
sheeter_engine::xml_to_json(&fs::read_to_string(input)?)?,
)?;
}
Commands::JsonToXml { input, output } => {
fs::write(
output,
sheeter_engine::json_to_xml(&fs::read_to_string(input)?)?,
)?;
}
Commands::CsvToXml { input, output } => {
fs::write(
output,
sheeter_engine::csv_to_xml(&fs::read_to_string(input)?)?,
)?;
}
Commands::TsvToXml { input, output } => {
fs::write(
output,
sheeter_engine::tsv_to_xml(&fs::read_to_string(input)?)?,
)?;
}
Commands::YamlToXml { input, output } => {
fs::write(
output,
sheeter_engine::yaml_to_xml(&fs::read_to_string(input)?)?,
)?;
}
Commands::XmlToCsv { input, output } => {
fs::write(
output,
sheeter_engine::xml_to_csv(&fs::read_to_string(input)?)?,
)?;
}
Commands::XmlToTsv { input, output } => {
fs::write(
output,
sheeter_engine::xml_to_tsv(&fs::read_to_string(input)?)?,
)?;
}
Commands::XmlToYaml { input, output } => {
fs::write(
output,
sheeter_engine::xml_to_yaml(&fs::read_to_string(input)?)?,
)?;
}
}
Ok(())
}