#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CargoProfile {
Dev,
Release,
Profile(String),
}
impl CargoProfile {
pub fn from_flags(release: bool, profile: Option<&str>) -> eyre::Result<Self> {
match (profile, release) {
(Some(profile), true) => {
eyre::bail!("conflicting usage of --profile={:?} and --release", profile);
}
(Some("release"), false) => Ok(Self::Release),
(Some("debug"), false) | (Some("dev"), false) => Ok(Self::Dev),
(Some(profile), false) => Ok(Self::Profile(profile.into())),
(None, true) => Ok(Self::Release),
(None, false) => Ok(Self::Dev),
}
}
pub fn cargo_args(&self) -> Vec<String> {
match self {
Self::Dev => vec![],
Self::Release => vec!["--release".into()],
Self::Profile(p) => vec!["--profile".into(), p.into()],
}
}
pub fn name(&self) -> &str {
match self {
Self::Dev => "dev",
Self::Release => "release",
Self::Profile(p) => p,
}
}
pub fn target_subdir(&self) -> &str {
match self {
Self::Dev => "debug",
Self::Release => "release",
Self::Profile(p) => p,
}
}
}