use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum LightFixtureTypeEnum {
PointSource,
DirectionSource,
SecurityLighting,
UserDefined,
#[default]
NotDefined,
}
impl LightFixtureTypeEnum {
pub fn to_step(&self) -> &'static str {
match self {
Self::PointSource => ".POINTSOURCE.",
Self::DirectionSource => ".DIRECTIONSOURCE.",
Self::SecurityLighting => ".SECURITYLIGHTING.",
Self::UserDefined => ".USERDEFINED.",
Self::NotDefined => ".NOTDEFINED.",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum LightEmissionSourceEnum {
CompactFluorescent,
Fluorescent,
HighPressureMercury,
HighPressureSodium,
Led,
LightEmittingDiode,
LowPressureSodium,
LowVoltageHalogen,
MainVoltageHalogen,
MetalHalide,
TungstenFilament,
#[default]
NotDefined,
}
impl LightEmissionSourceEnum {
pub fn to_step(&self) -> &'static str {
match self {
Self::CompactFluorescent => ".COMPACTFLUORESCENT.",
Self::Fluorescent => ".FLUORESCENT.",
Self::HighPressureMercury => ".HIGHPRESSUREMERCURY.",
Self::HighPressureSodium => ".HIGHPRESSURESODIUM.",
Self::Led => ".LED.",
Self::LightEmittingDiode => ".LIGHTEMITTINGDIODE.",
Self::LowPressureSodium => ".LOWPRESSURESODIUM.",
Self::LowVoltageHalogen => ".LOWVOLTAGEHALOGEN.",
Self::MainVoltageHalogen => ".MAINVOLTAGEHALOGEN.",
Self::MetalHalide => ".METALHALIDE.",
Self::TungstenFilament => ".TUNGSTENFILAMENT.",
Self::NotDefined => ".NOTDEFINED.",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct EntityRef(pub u64);
impl EntityRef {
pub fn new(id: u64) -> Self {
Self(id)
}
}
impl std::fmt::Display for EntityRef {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "#{}", self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OptionalRef {
Some(EntityRef),
None,
}
impl std::fmt::Display for OptionalRef {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Some(r) => write!(f, "{}", r),
Self::None => write!(f, "$"),
}
}
}
impl From<EntityRef> for OptionalRef {
fn from(r: EntityRef) -> Self {
Self::Some(r)
}
}
impl From<Option<EntityRef>> for OptionalRef {
fn from(opt: Option<EntityRef>) -> Self {
match opt {
Some(r) => Self::Some(r),
None => Self::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[allow(non_camel_case_types)]
pub enum ConductorFunctionEnum {
PHASE_L1,
PHASE_L2,
PHASE_L3,
Neutral,
ProtectiveEarth,
ProtectiveEarthNeutral,
#[default]
NotDefined,
}
impl ConductorFunctionEnum {
pub fn to_step(&self) -> &'static str {
match self {
Self::PHASE_L1 => ".PHASE_L1.",
Self::PHASE_L2 => ".PHASE_L2.",
Self::PHASE_L3 => ".PHASE_L3.",
Self::Neutral => ".NEUTRAL.",
Self::ProtectiveEarth => ".PROTECTIVEEARTH.",
Self::ProtectiveEarthNeutral => ".PROTECTIVEEARTHNEUTRAL.",
Self::NotDefined => ".NOTDEFINED.",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum InsulationStandardClass {
Class0,
ClassI,
ClassII,
ClassIII,
#[default]
NotDefined,
}
impl InsulationStandardClass {
pub fn to_step(&self) -> &'static str {
match self {
Self::Class0 => ".CLASS0.",
Self::ClassI => ".CLASSI.",
Self::ClassII => ".CLASSII.",
Self::ClassIII => ".CLASSIII.",
Self::NotDefined => ".NOTDEFINED.",
}
}
pub fn from_gldf_safety_class(s: &str) -> Self {
match s.to_uppercase().as_str() {
"I" | "CLASS I" | "CLASSI" | "1" => Self::ClassI,
"II" | "CLASS II" | "CLASSII" | "2" => Self::ClassII,
"III" | "CLASS III" | "CLASSIII" | "3" => Self::ClassIII,
"0" | "CLASS 0" | "CLASS0" => Self::Class0,
_ => Self::NotDefined,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct ElectricalDeviceProperties {
pub rated_current: Option<f64>,
pub rated_voltage: Option<f64>,
pub rated_voltage_max: Option<f64>,
pub nominal_frequency_min: Option<f64>,
pub nominal_frequency_max: Option<f64>,
pub power_factor: Option<f64>,
pub conductor_function: Option<ConductorFunctionEnum>,
pub number_of_poles: Option<i32>,
pub has_protective_earth: Option<bool>,
pub insulation_standard_class: Option<InsulationStandardClass>,
pub ip_code: Option<String>,
pub ik_code: Option<String>,
pub earthing_style: Option<String>,
pub heat_dissipation: Option<f64>,
pub power: Option<f64>,
pub nominal_power_consumption: Option<f64>,
pub number_of_power_supply_ports: Option<i32>,
}
#[derive(Debug, Clone, Default)]
pub struct LightFixtureCommonProperties {
pub reference: Option<String>,
pub status: Option<String>,
pub number_of_sources: Option<i32>,
pub total_wattage: Option<f64>,
pub mounting_type: Option<String>,
pub placing_type: Option<String>,
pub maintenance_factor: Option<f64>,
pub max_plenum_sensible_load: Option<f64>,
pub max_space_sensible_load: Option<f64>,
pub sensible_load_to_radiant: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct ManufacturerTypeInfo {
pub global_trade_item_number: Option<String>,
pub article_number: Option<String>,
pub model_reference: Option<String>,
pub model_label: Option<String>,
pub manufacturer: Option<String>,
pub production_year: Option<i32>,
pub assembly_place: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct WarrantyInfo {
pub warranty_identifier: Option<String>,
pub warranty_start_date: Option<String>,
pub warranty_end_date: Option<String>,
pub warranty_period: Option<f64>,
pub point_of_contact: Option<String>,
pub terms_and_conditions: Option<String>,
pub exclusions: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct ServiceLifeInfo {
pub service_life_duration: Option<f64>,
pub service_life_type: Option<String>,
pub mean_time_between_failure: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum FlowDirectionEnum {
Source,
Sink,
SourceAndSink,
#[default]
NotDefined,
}
impl FlowDirectionEnum {
pub fn to_step(&self) -> &'static str {
match self {
Self::Source => ".SOURCE.",
Self::Sink => ".SINK.",
Self::SourceAndSink => ".SOURCEANDSINK.",
Self::NotDefined => ".NOTDEFINED.",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum DistributionSystemEnum {
Electrical,
Lighting,
LightningProtection,
PowerGeneration,
#[default]
NotDefined,
}
impl DistributionSystemEnum {
pub fn to_step(&self) -> &'static str {
match self {
Self::Electrical => ".ELECTRICAL.",
Self::Lighting => ".LIGHTING.",
Self::LightningProtection => ".LIGHTNINGPROTECTION.",
Self::PowerGeneration => ".POWERGENERATION.",
Self::NotDefined => ".NOTDEFINED.",
}
}
}