use std::fmt;
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct FourCc([u8; 4]);
impl FourCc {
pub const fn new(val: [u8; 4]) -> Self {
assert!(val.is_ascii(), "only ASCII characters are allowed in a FourCc");
Self(val)
}
pub const fn try_new(val: [u8; 4]) -> Option<Self> {
if val.is_ascii() { Some(Self(val)) } else { None }
}
pub const fn get(&self) -> [u8; 4] {
self.0
}
}
impl fmt::Debug for FourCc {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match std::str::from_utf8(&self.0) {
Ok(name) => f.write_str(name),
_ => write!(f, "{:x?}", self.0),
}
}
}
#[derive(Copy, Clone)]
pub enum Tier {
Preferred,
Standard,
Fallback,
}
#[derive(Copy, Clone, Debug, Default)]
pub enum Limit {
None,
#[default]
Default,
Maximum(usize),
}
impl Limit {
pub fn limit_or_default(&self, default: usize) -> Option<usize> {
match self {
Limit::None => None,
Limit::Default => Some(default),
Limit::Maximum(max) => Some(*max),
}
}
}