From 0d986059ce21e4ff9df8f22ee13fd7f543797709 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sun, 4 Jun 2023 13:03:26 +0200 Subject: [PATCH] Extract cli command structs --- src/cli.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 26 +++----------------------- 2 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 src/cli.rs diff --git a/src/cli.rs b/src/cli.rs new file mode 100644 index 0000000..e057d6f --- /dev/null +++ b/src/cli.rs @@ -0,0 +1,47 @@ +/* + * MIT License + * + * Copyright (c) 2023 Comprehensive Cancer Center Mainfranken + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +use clap::{Parser, Subcommand}; + +#[derive(Parser)] +#[command(author, version, about, long_about = None)] +#[command(propagate_version = true, arg_required_else_help(true))] +pub struct Cli { + #[command(subcommand)] + pub command: Command, +} + +#[derive(Subcommand)] +pub enum Command { + #[command(about = "Zeigt alle enthaltenen Kataloge und Formulare mit Revision an.")] + List { inputfile: String }, + #[command(about = "Modifiziert die angegebene Datei anhand der Profildatei")] + Modify { + inputfile: String, + #[arg(long = "profile", help = "Profildatei (Optional)")] + profile: Option, + #[arg(long = "output", help = "Ausgabedatei (Optional)")] + outputfile: Option, + }, +} diff --git a/src/main.rs b/src/main.rs index 20529f4..9742412 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,13 +22,14 @@ * SOFTWARE. */ +use clap::Parser; use std::fs; use std::fs::OpenOptions; use std::io::Write; use std::ops::Add; use std::str::FromStr; -use clap::{Parser, Subcommand}; +use crate::cli::{Cli, Command}; use quick_xml::de::from_str; use quick_xml::se::Serializer; use serde::Serialize; @@ -36,31 +37,10 @@ use serde::Serialize; use crate::model::onkostar_editor::OnkostarEditor; use crate::profile::Profile; +mod cli; mod model; mod profile; -#[derive(Parser)] -#[command(author, version, about, long_about = None)] -#[command(propagate_version = true, arg_required_else_help(true))] -struct Cli { - #[command(subcommand)] - command: Command, -} - -#[derive(Subcommand)] -enum Command { - #[command(about = "Zeigt alle enthaltenen Kataloge und Formulare mit Revision an.")] - List { inputfile: String }, - #[command(about = "Modifiziert die angegebene Datei anhand der Profildatei")] - Modify { - inputfile: String, - #[arg(long = "profile", help = "Profildatei (Optional)")] - profile: Option, - #[arg(long = "output", help = "Ausgabedatei (Optional)")] - outputfile: Option, - }, -} - fn main() { let cli = Cli::parse();