workspacer_cli/
bump_release_arg.rs1crate::ix!();
3
4#[derive(Debug,Clone)]
7pub struct ReleaseArg(pub ReleaseType);
8
9impl FromStr for ReleaseArg {
10 type Err = String;
11
12 fn from_str(s: &str) -> Result<Self, Self::Err> {
20 let lower = s.to_lowercase();
21 if lower == "major" {
22 Ok(ReleaseArg(ReleaseType::Major))
23 } else if lower == "minor" {
24 Ok(ReleaseArg(ReleaseType::Minor))
25 } else if lower == "patch" {
26 Ok(ReleaseArg(ReleaseType::Patch))
27 } else if lower.starts_with("alpha") {
28 let parts: Vec<_> = lower.splitn(2, '=').collect();
30 if parts.len() == 1 {
31 Ok(ReleaseArg(ReleaseType::Alpha(None)))
33 } else {
34 let maybe_num = parts[1].parse::<u64>().map_err(|e| format!("Invalid number in alpha=NN: {e}"))?;
36 Ok(ReleaseArg(ReleaseType::Alpha(Some(maybe_num))))
37 }
38 } else {
39 Err(format!("Unsupported release type: '{s}' (valid: major|minor|patch|alpha[=N])"))
40 }
41 }
42}