pub mod cjj45;
pub mod en13201;
pub mod en13201_selector;
pub mod mlo;
pub mod rp8;
use std::borrow::Cow;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Region {
Us,
Eu,
Cn,
International,
Custom,
}
impl std::fmt::Display for Region {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Us => write!(f, "US"),
Self::Eu => write!(f, "EU"),
Self::Cn => write!(f, "CN"),
Self::International => write!(f, "International"),
Self::Custom => write!(f, "Custom"),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct ComplianceItem {
pub parameter: String,
pub required: String,
pub achieved: String,
pub passed: bool,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ComplianceResult {
pub standard: Cow<'static, str>,
pub region: Region,
pub items: Vec<ComplianceItem>,
}
impl ComplianceResult {
pub fn passed(&self) -> bool {
self.items.iter().all(|i| i.passed)
}
pub fn failure_count(&self) -> usize {
self.items.iter().filter(|i| !i.passed).count()
}
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct DesignResult {
pub avg_illuminance_lux: f64,
pub min_illuminance_lux: f64,
pub max_illuminance_lux: f64,
pub avg_luminance_cd_m2: Option<f64>,
pub uniformity_overall: f64,
pub uniformity_longitudinal: Option<f64>,
pub threshold_increment_pct: Option<f64>,
}
pub trait LightingStandard {
type Selection;
fn name(&self) -> &'static str;
fn region(&self) -> Region;
fn check_file(
&self,
_selection: &Self::Selection,
_ldt: &crate::Eulumdat,
) -> Option<ComplianceResult> {
None
}
fn check_design(
&self,
_selection: &Self::Selection,
_design: &DesignResult,
) -> Option<ComplianceResult> {
None
}
}