diff --git a/src/cli.rs b/src/cli.rs index 1fb7f65..07dd93e 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -15,7 +15,7 @@ pub enum CommitTypeCli { Perf, } -#[derive(Parser, Debug)] +#[derive(Debug, Parser)] #[command(name = "auto-commit")] #[command(author, version, about, long_about = None)] pub struct Args { @@ -35,6 +35,25 @@ pub struct Args { pub verbose: bool, } +impl std::str::FromStr for CommitTypeCli { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_str() { + "feat" | "feature" => Ok(CommitTypeCli::Feat), + "fix" | "bug" => Ok(CommitTypeCli::Fix), + "docs" | "documentation" => Ok(CommitTypeCli::Docs), + "style" => Ok(CommitTypeCli::Style), + "refactor" => Ok(CommitTypeCli::Refactor), + "test" | "tests" => Ok(CommitTypeCli::Test), + "chore" => Ok(CommitTypeCli::Chore), + "build" | "ci" => Ok(CommitTypeCli::Build), + "perf" | "performance" => Ok(CommitTypeCli::Perf), + _ => Err(format!("Unknown commit type: {}", s)), + } + } +} + impl From for CommitType { fn from(cli_type: CommitTypeCli) -> Self { match cli_type {