use derive_more::{Display, IsVariant};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display, IsVariant)]
#[display("{}", self.as_str())]
#[non_exhaustive]
pub enum BayerPattern {
Bggr,
Rggb,
Grbg,
Gbrg,
}
impl BayerPattern {
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn as_str(&self) -> &'static str {
match self {
Self::Bggr => "bggr",
Self::Rggb => "rggb",
Self::Grbg => "grbg",
Self::Gbrg => "gbrg",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn variants_construct_and_compare() {
assert_eq!(BayerPattern::Bggr, BayerPattern::Bggr);
assert_ne!(BayerPattern::Bggr, BayerPattern::Rggb);
}
#[test]
fn is_variant_helpers_work() {
assert!(BayerPattern::Bggr.is_bggr());
assert!(!BayerPattern::Bggr.is_rggb());
}
#[cfg(feature = "std")]
#[test]
fn copy_and_hash() {
use std::{
collections::hash_map::DefaultHasher,
hash::{Hash, Hasher},
};
let p = BayerPattern::Grbg;
let _copy = p; let mut h = DefaultHasher::new();
p.hash(&mut h);
let _ = h.finish();
}
#[cfg(feature = "std")]
#[test]
fn as_str_matches_display() {
use std::format;
for v in [
BayerPattern::Bggr,
BayerPattern::Rggb,
BayerPattern::Grbg,
BayerPattern::Gbrg,
] {
assert_eq!(v.as_str(), format!("{v}"));
}
assert_eq!(BayerPattern::Bggr.as_str(), "bggr");
}
}