openehr-rm 0.0.2

openEHR RM 1.2.0 Reference Model, generated from BMM
Documentation
//! Hand-written RM class invariants for `ACTIVITY`.
//!
//! - `Action_archetype_id_valid` (archie `Activity`, `nullOrNotEmpty`):
//!   `action_archetype_id` non-empty.
//! - `Archetype_node_id_valid`: inherited LOCATABLE.

use crate::composition::content::entry::activity::Activity;
use openehr_base::validate::{InvariantViolation, Validate};

impl Validate for Activity {
    fn validate_invariants(&self, out: &mut Vec<InvariantViolation>) {
        crate::validate::generated::activity_core(
            &self.action_archetype_id,
            &self.archetype_node_id,
            out,
        );
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::data_structures::item_structure::item_structure::ItemStructure;
    use crate::data_structures::item_structure::item_tree::ItemTree;
    use crate::data_types::text::dv_text::{DvText, DvTextData};

    fn text(value: &str) -> DvText {
        DvText::DvText(DvTextData {
            value: value.to_owned(),
            hyperlink: None,
            formatting: None,
            mappings: openehr_base::containers::present_nonempty(Vec::new()),
            language: None,
            encoding: None,
        })
    }

    fn description() -> ItemStructure {
        ItemStructure::ItemTree(Box::new(ItemTree {
            name: text("tree"),
            archetype_node_id: "at0003".to_owned(),
            uid: None,
            links: openehr_base::containers::present_nonempty(Vec::new()),
            archetype_details: None,
            feeder_audit: None,
            items: openehr_base::containers::present(Vec::new()),
        }))
    }

    fn activity(action_archetype_id: &str) -> Activity {
        Activity {
            name: text("activity"),
            archetype_node_id: "at0001".to_owned(),
            uid: None,
            links: openehr_base::containers::present_nonempty(Vec::new()),
            archetype_details: None,
            feeder_audit: None,
            timing: None,
            action_archetype_id: action_archetype_id.to_owned(),
            description: description(),
        }
    }

    #[test]
    fn valid_activity() {
        assert!(activity("/.*/").invariants().is_empty());
    }

    #[test]
    fn empty_action_archetype_id_invalid() {
        let v = activity("").invariants();
        assert!(
            v.iter()
                .any(|m| m.message == "Invariant Action_archetype_id_valid failed on type ACTIVITY"),
            "got {v:?}"
        );
    }
}