pub const NATIVE_WINDOW_WIDTH: f64 = 390.0;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum PopoverStyle {
#[default]
Classic,
Native,
}
impl PopoverStyle {
pub fn parse(value: &str) -> Option<Self> {
match value {
"classic" => Some(Self::Classic),
"native" => Some(Self::Native),
_ => None,
}
}
pub fn window_width(self, classic: f64) -> f64 {
match self {
Self::Classic => classic,
Self::Native => NATIVE_WINDOW_WIDTH,
}
}
}
#[cfg(test)]
mod tests {
use super::PopoverStyle;
#[test]
fn parses_only_exact_style_names() {
assert_eq!(PopoverStyle::parse("classic"), Some(PopoverStyle::Classic));
assert_eq!(PopoverStyle::parse("native"), Some(PopoverStyle::Native));
assert_eq!(PopoverStyle::parse("Native"), None);
assert_eq!(PopoverStyle::parse(""), None);
assert_eq!(PopoverStyle::parse("frosted"), None);
}
#[test]
fn defaults_to_classic() {
assert_eq!(PopoverStyle::default(), PopoverStyle::Classic);
}
#[test]
fn uses_host_classic_width_and_shared_native_width() {
assert_eq!(PopoverStyle::Classic.window_width(320.0), 320.0);
assert_eq!(PopoverStyle::Classic.window_width(300.0), 300.0);
assert_eq!(PopoverStyle::Native.window_width(320.0), 390.0);
assert_eq!(PopoverStyle::Native.window_width(300.0), 390.0);
}
}