use crate::v1_1::ehr::ehr_access::EhrAccess;
impl EhrAccess {
#[must_use]
pub fn scheme(&self) -> Option<&str> {
self.settings
.as_ref()
.map(openehr_base::serde_support::OpenSubtype::type_name)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::v1_1::data_types::text::dv_text::{DvText, DvTextData};
fn text(value: &str) -> DvText {
DvText::DvText(DvTextData {
value: value.to_owned(),
hyperlink: None,
formatting: None,
mappings: None,
language: None,
encoding: None,
})
}
#[expect(
clippy::disallowed_types,
reason = "an open subtype's members ARE an untyped JSON map — that is what makes the settings extensible (#1694 boundary class)"
)]
fn access(scheme: Option<&str>) -> Option<EhrAccess> {
let settings = match scheme {
Some(scheme) => Some(
openehr_base::serde_support::OpenSubtype::new(scheme, serde_json::Map::new())
.ok()?,
),
None => None,
};
Some(EhrAccess {
name: text("access"),
archetype_node_id: "openEHR-EHR-EHR_ACCESS.generic.v1".to_owned(),
uid: None,
links: None,
archetype_details: None,
feeder_audit: None,
settings,
})
}
#[test]
fn the_scheme_is_the_settings_concrete_type() {
let settings = access(Some("OPENEHR_ACCESS_CONTROL_SETTINGS")).expect("a named subtype");
assert_eq!(settings.scheme(), Some("OPENEHR_ACCESS_CONTROL_SETTINGS"));
let other = access(Some("SOME_OTHER_ACCESS_CONTROL")).expect("a named subtype");
assert_eq!(other.scheme(), Some("SOME_OTHER_ACCESS_CONTROL"));
}
#[test]
fn no_settings_means_no_scheme() {
let access = access(None).expect("no settings is a valid EHR_ACCESS");
assert!(access.scheme().is_none());
}
}