Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

facett-flow/src/attr.rs

//! Optional parallel tables. Setters validate atomically against the scene's current ordering.
use serde::{Deserialize, Serialize};
#[cfg(feature = "boxes")]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Sizes {
    pub nodes: Vec<[f32; 2]>,
}
#[cfg(feature = "status")]
#[non_exhaustive]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum Status {
    Ok,
    Slow,
    Error,
}
#[cfg(feature = "status")]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct StatusTable {
    pub nodes: Vec<Option<Status>>,
    pub edges: Vec<Option<Status>>,
}
#[cfg(feature = "status")]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct StatusPalette {
    pub ok: egui::Color32,
    pub slow: egui::Color32,
    pub error: egui::Color32,
}
#[cfg(feature = "status")]
impl StatusPalette {
    pub fn from_theme(th: &facett_core::Theme) -> Self {
        Self {
            ok: th.point,
            slow: facett_core::look::AMBER,
            error: facett_core::look::RED,
        }
    }
    pub(crate) fn color(&self, value: Option<Status>, plain: egui::Color32) -> egui::Color32 {
        match value {
            Some(Status::Ok) => self.ok,
            Some(Status::Slow) => self.slow,
            Some(Status::Error) => self.error,
            None => plain,
        }
    }
}
#[cfg(feature = "rate")]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Rates {
    pub edges: Vec<Option<f32>>,
}

#[cfg(all(test, feature = "status"))]
mod tests {
    use super::*;
    #[test]
    fn status_colours_follow_all_host_themes() {
        for look in [
            facett_core::LookTheme::nordisk_dark(),
            facett_core::LookTheme::nordisk_light(),
            facett_core::LookTheme::device(),
        ] {
            let theme = look.to_legacy_palette();
            let p = StatusPalette::from_theme(&theme);
            assert_eq!(p.color(Some(Status::Ok), theme.text), theme.point);
            assert_eq!(
                p.color(Some(Status::Slow), theme.text),
                facett_core::look::AMBER
            );
            assert_eq!(
                p.color(Some(Status::Error), theme.text),
                facett_core::look::RED
            );
            assert_eq!(p.color(None, theme.text), theme.text);
        }
    }
}