use std::sync::Arc;
use ifc_model::EntityId;
use super::ExactValue;
#[derive(Debug, Clone, PartialEq)]
pub struct ExactTypedValue {
pub value_type: Arc<str>,
pub value: ExactValue,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExactEntityRef {
pub id: EntityId,
pub type_name: Arc<str>,
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct ExactEnumeratedValue {
pub values: Vec<ExactTypedValue>,
pub enumeration: Option<ExactEnumeration>,
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct ExactEnumeration {
pub id: EntityId,
pub name: Arc<str>,
pub values: Vec<ExactTypedValue>,
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct ExactBoundedValue {
pub lower: Option<ExactTypedValue>,
pub upper: Option<ExactTypedValue>,
pub set_point: Option<ExactTypedValue>,
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct ExactTableValue {
pub rows: Vec<ExactTableRow>,
pub expression: Option<Arc<str>>,
pub defining_unit: Option<EntityId>,
pub defined_unit: Option<EntityId>,
pub interpolation: Option<Arc<str>>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ExactTableRow {
pub defining: ExactTypedValue,
pub defined: ExactTypedValue,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct ExactReferenceValue {
pub usage_name: Option<Arc<str>>,
pub target: Option<ExactEntityRef>,
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct ExactComplexValue {
pub usage: Option<Arc<str>>,
pub discrimination: Option<Arc<str>>,
pub quality: Option<Arc<str>>,
pub members: Vec<ExactComplexMember>,
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct ExactComplexMember {
pub name: Arc<str>,
pub id: EntityId,
pub value_type: Option<Arc<str>>,
pub unit_id: Option<EntityId>,
pub value: ExactValue,
}