rs95 0.1.0

A Rust library implementing the ISA-95 domain models
Documentation
#[macro_export]
macro_rules! declare_personnel_models {
    ($id_type:ty) => {
        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PersonnelClass {
            pub id: $id_type,
            pub name: String,
            pub properties: Vec<PersonnelClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PersonnelClassProperty {
            pub id: $id_type,
            pub name: String,
            pub nested_properties: Vec<PersonnelClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct Person {
            pub id: $id_type,
            pub name: String,
            pub personnel_classes: Vec<$id_type>,
            pub properties: Vec<PersonProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PersonProperty {
            pub id: $id_type,
            pub name: String,
            pub maps_to_personnel_class_property_id: Option<$id_type>,
            pub nested_properties: Vec<PersonProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct QualificationTestSpecification {
            pub id: $id_type,
            pub name: String,
            pub person_ids: Vec<$id_type>,
            pub personnel_class_ids: Vec<$id_type>,
            pub person_property_ids: Vec<$id_type>,
            pub personnel_class_property_ids: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct QualificationTestResult {
            pub id: $id_type,
            pub qualification_test_specification_id: $id_type,
            pub person_property_ids: Vec<$id_type>,
        }
    };
}

#[macro_export]
macro_rules! declare_equipment_models {
    ($id_type:ty) => {
        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct EquipmentClass {
            pub id: $id_type,
            pub name: String,
            pub properties: Vec<EquipmentClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct EquipmentClassProperty {
            pub id: $id_type,
            pub name: String,
            pub nested_properties: Vec<EquipmentClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct Equipment {
            pub id: $id_type,
            pub name: String,
            pub equipment_classes: Vec<$id_type>,
            pub properties: Vec<EquipmentProperty>,
            pub sub_equipment: Vec<Equipment>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct EquipmentProperty {
            pub id: $id_type,
            pub name: String,
            pub maps_to_equipment_class_property_id: Option<$id_type>,
            pub nested_properties: Vec<EquipmentProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct EquipmentCapabilityTestSpecification {
            pub id: $id_type,
            pub name: String,
            pub equipment_ids: Vec<$id_type>,
            pub equipment_class_ids: Vec<$id_type>,
            pub equipment_property_ids: Vec<$id_type>,
            pub equipment_class_property_ids: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct EquipmentCapabilityTestResult {
            pub id: $id_type,
            pub equipment_capability_test_specification_id: $id_type,
            pub equipment_property_ids: Vec<$id_type>,
        }
    };
}

#[macro_export]
macro_rules! declare_physical_asset_models {
    ($id_type:ty) => {
        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PhysicalAssetClass {
            pub id: $id_type,
            pub name: String,
            pub properties: Vec<PhysicalAssetClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PhysicalAssetClassProperty {
            pub id: $id_type,
            pub name: String,
            pub nested_properties: Vec<PhysicalAssetClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PhysicalAsset {
            pub id: $id_type,
            pub name: String,
            pub physical_asset_class_id: $id_type,
            pub properties: Vec<PhysicalAssetProperty>,
            pub sub_assets: Vec<PhysicalAsset>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PhysicalAssetProperty {
            pub id: $id_type,
            pub name: String,
            pub maps_to_physical_asset_class_property_id: Option<$id_type>,
            pub nested_properties: Vec<PhysicalAssetProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PhysicalAssetCapabilityTestSpecification {
            pub id: $id_type,
            pub name: String,
            pub physical_asset_ids: Vec<$id_type>,
            pub physical_asset_class_ids: Vec<$id_type>,
            pub physical_asset_property_ids: Vec<$id_type>,
            pub physical_asset_class_property_ids: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct PhysicalAssetCapabilityTestResult {
            pub id: $id_type,
            pub physical_asset_capability_test_specification_id: $id_type,
            pub physical_asset_property_ids: Vec<$id_type>,
        }
    };
}

#[macro_export]
macro_rules! declare_material_models {
    ($id_type:ty) => {
        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialClass {
            pub id: $id_type,
            pub name: String,
            pub properties: Vec<MaterialClassProperty>,
            pub assembled_from: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialClassProperty {
            pub id: $id_type,
            pub name: String,
            pub nested_properties: Vec<MaterialClassProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialDefinition {
            pub id: $id_type,
            pub name: String,
            pub material_classes: Vec<$id_type>,
            pub properties: Vec<MaterialDefinitionProperty>,
            pub assembled_from: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialDefinitionProperty {
            pub id: $id_type,
            pub name: String,
            pub maps_to_material_class_property_id: Option<$id_type>,
            pub nested_properties: Vec<MaterialDefinitionProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialLot {
            pub id: $id_type,
            pub name: String,
            pub material_definition_id: $id_type,
            pub properties: Vec<MaterialLotProperty>,
            pub assembled_from: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialSublot {
            pub id: $id_type,
            pub name: String,
            pub material_lot_id: $id_type,
            pub properties: Vec<MaterialLotProperty>,
            pub sublots: Vec<MaterialSublot>,
            pub assembled_from: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialLotProperty {
            pub id: $id_type,
            pub name: String,
            pub maps_to_material_definition_property_id: Option<$id_type>,
            pub nested_properties: Vec<MaterialLotProperty>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct MaterialTestSpecification {
            pub id: $id_type,
            pub name: String,
            pub material_class_ids: Vec<$id_type>,
            pub material_definition_ids: Vec<$id_type>,
            pub material_lot_ids: Vec<$id_type>,
            pub material_class_property_ids: Vec<$id_type>,
            pub material_definition_property_ids: Vec<$id_type>,
            pub material_lot_property_ids: Vec<$id_type>,
        }

        #[derive(Debug, Clone, PartialEq)]
        #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
        pub struct QATestResult {
            pub id: $id_type,
            pub name: String,
            pub material_test_specification_id: $id_type,
            pub material_lot_property_ids: Vec<$id_type>,
        }
    };
}