#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum DepSelection {
#[default]
All,
NoOptional,
Prod,
ProdNoOptional,
Dev,
DevNoOptional,
}
impl DepSelection {
pub fn from_flags(prod: bool, dev: bool, no_optional: bool) -> Self {
match (prod, dev, no_optional) {
(_, true, false) => Self::Dev,
(_, true, true) => Self::DevNoOptional,
(true, false, false) => Self::Prod,
(true, false, true) => Self::ProdNoOptional,
(false, false, false) => Self::All,
(false, false, true) => Self::NoOptional,
}
}
pub fn dev_only(self) -> bool {
matches!(self, Self::Dev | Self::DevNoOptional)
}
pub fn prod_only(self) -> bool {
matches!(self, Self::Prod | Self::ProdNoOptional)
}
pub fn skip_optional(self) -> bool {
matches!(
self,
Self::NoOptional | Self::ProdNoOptional | Self::DevNoOptional
)
}
pub fn is_filtered(self) -> bool {
!matches!(self, Self::All)
}
pub fn prod_or_dev_axis(self) -> bool {
self.prod_only() || self.dev_only()
}
pub fn label(self) -> &'static str {
match self {
Self::All => "",
Self::NoOptional => "--no-optional",
Self::Prod => "--prod",
Self::ProdNoOptional => "--prod --no-optional",
Self::Dev => "--dev",
Self::DevNoOptional => "--dev --no-optional",
}
}
}