cimoxide-validation 0.3.2

SHACL validation of CGMES datasets against the ENTSO-E profile constraints
Documentation
// Generated by cimgen — do not edit by hand.
#![allow(clippy::all, dead_code, unused)]
use cimdecoder::CimDataset;
use crate::Violation;
use crate::helpers::*;

pub fn validate_p61970_301_diagramlayout_ap_con_complex_notsolvedmas_shacl(dataset: &CimDataset) -> Vec<Violation> {
    let mut v = Vec::new();
    v.extend(check_p61970_301_diagramlayout_ap_con_complex_notsolvedmas_shacl_text_diagram_object_diagram_obje_etc(dataset));
    v.extend(check_p61970_301_diagramlayout_ap_con_complex_notsolvedmas_shacl_diagram_object_diagram_object_id_etc(dataset));
    v
}

pub fn check_p61970_301_diagramlayout_ap_con_complex_notsolvedmas_shacl_text_diagram_object_diagram_obje_etc(dataset: &CimDataset) -> Vec<Violation> {
    let mut violations = Vec::new();
    for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
        let entry = &dataset.entries[mrid];
        let obj = match entry.element.as_any()
            .downcast_ref::<cimstructs::TextDiagramObject>() {
            Some(o) => o, None => continue,
        };
        let ref_mrid = match obj.base.identified_object_.as_ref() {
            Some(r) => &r.mrid, None => continue,
        };
        if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
            if ref_entry.element.type_name() == "GeneratingUnit" {
                violations.push(Violation {
                    object_id:   mrid.clone(),
                    rule_id:     "dln301:DiagramObject.IdentifiedObject-GeneratingUnitvalueType".to_string(),
                    class:       "TextDiagramObject".to_string(),
                    property:    "DiagramObject.IdentifiedObject".to_string(),
                    message:     "The association DiagramObject.IdentifiedObject points to a GeneratingUnit and not SynchronousMachine.".to_string(),
                    severity:    "sh:Violation".to_string(),
                    name:        "C:453:DL:DiagramObject:SynchronousMachine".to_string(),
                    description: "The DiagramObject should link to SynchronousMachine and not GeneratingUnit.".to_string(),
                });
            }
        }
    }
    violations
}

pub fn check_p61970_301_diagramlayout_ap_con_complex_notsolvedmas_shacl_diagram_object_diagram_object_id_etc(dataset: &CimDataset) -> Vec<Violation> {
    let mut violations = Vec::new();
    for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
        let entry = &dataset.entries[mrid];
        let obj = match entry.element.as_any()
            .downcast_ref::<cimstructs::DiagramObject>() {
            Some(o) => o, None => continue,
        };
        let ref_mrid = match obj.identified_object_.as_ref() {
            Some(r) => &r.mrid, None => continue,
        };
        if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
            if ref_entry.element.type_name() == "GeneratingUnit" {
                violations.push(Violation {
                    object_id:   mrid.clone(),
                    rule_id:     "dln301:DiagramObject.IdentifiedObject-GeneratingUnitvalueType".to_string(),
                    class:       "DiagramObject".to_string(),
                    property:    "DiagramObject.IdentifiedObject".to_string(),
                    message:     "The association DiagramObject.IdentifiedObject points to a GeneratingUnit and not SynchronousMachine.".to_string(),
                    severity:    "sh:Violation".to_string(),
                    name:        "C:453:DL:DiagramObject:SynchronousMachine".to_string(),
                    description: "The DiagramObject should link to SynchronousMachine and not GeneratingUnit.".to_string(),
                });
            }
        }
    }
    violations
}