use crate::debian::Debian; use crate::errors::BumperError; use crate::rust::Rust; use std::path::Path; pub enum ProjectKind { Rust(Rust), Debian(Debian), } impl ProjectKind { pub fn detect>(dirname: P) -> Result, BumperError> { let dirname = dirname.as_ref(); let mut kinds = vec![]; if let Ok(p) = Rust::new(dirname) { kinds.push(ProjectKind::Rust(p)); } if let Ok(p) = Debian::new(dirname) { kinds.push(ProjectKind::Debian(p)); } if kinds.is_empty() { Err(BumperError::UnknownProjectKind(dirname.to_path_buf())) } else { Ok(kinds) } } pub fn set_version(&mut self, version: &str) -> Result<(), BumperError> { match self { Self::Rust(ref mut rust) => rust.set_version(version)?, Self::Debian(ref mut debian) => debian.set_version(version)?, } Ok(()) } }