ifc_resource/actor/
organization.rs1use ifc_model::EntityId;
5
6use crate::actor::role::ActorRole;
7use crate::error::ResourceResult;
8use crate::view::{Record, ResourceView};
9
10#[derive(Debug, Clone, Copy)]
12pub struct Organization<'m, 's> {
13 record: Record<'m, 's>,
14}
15
16impl<'m, 's> Organization<'m, 's> {
17 pub(crate) fn from_record(record: Record<'m, 's>) -> ResourceResult<Self> {
18 Ok(Self { record })
19 }
20
21 #[must_use]
23 pub fn id(&self) -> EntityId {
24 self.record.id
25 }
26
27 pub fn identification(&self) -> ResourceResult<Option<&'m str>> {
29 self.record.optional_text("Identification")
30 }
31
32 pub fn name(&self) -> ResourceResult<&'m str> {
34 self.record.required_text("Name")
35 }
36
37 pub fn description(&self) -> ResourceResult<Option<&'m str>> {
39 self.record.optional_text("Description")
40 }
41
42 pub fn role_ids(&self) -> ResourceResult<Vec<EntityId>> {
44 self.record.refs("Roles", "IfcActorRole", 1, true, false)
45 }
46
47 pub fn roles(&self) -> ResourceResult<Vec<ActorRole<'m, 's>>> {
49 self.role_ids()?
50 .into_iter()
51 .map(|id| {
52 Record::new(self.record.model, self.record.schema, id, "IfcActorRole")
53 .and_then(ActorRole::from_record)
54 })
55 .collect()
56 }
57
58 pub fn address_ids(&self) -> ResourceResult<Vec<EntityId>> {
60 self.record.refs("Addresses", "IfcAddress", 1, true, false)
61 }
62}
63
64#[derive(Debug, Clone, Copy)]
67pub struct OrganizationRelationship<'m, 's> {
68 record: Record<'m, 's>,
69}
70
71impl<'m, 's> OrganizationRelationship<'m, 's> {
72 pub(crate) fn from_record(record: Record<'m, 's>) -> ResourceResult<Self> {
73 Ok(Self { record })
74 }
75
76 #[must_use]
78 pub fn id(&self) -> EntityId {
79 self.record.id
80 }
81
82 pub fn name(&self) -> ResourceResult<Option<&'m str>> {
84 self.record.optional_text("Name")
85 }
86
87 pub fn description(&self) -> ResourceResult<Option<&'m str>> {
89 self.record.optional_text("Description")
90 }
91
92 pub fn relating_organization(&self) -> ResourceResult<EntityId> {
94 self.record
95 .required_ref("RelatingOrganization", "IfcOrganization")
96 }
97
98 pub fn related_organizations(&self) -> ResourceResult<Vec<EntityId>> {
100 self.record
101 .refs("RelatedOrganizations", "IfcOrganization", 1, false, true)
102 }
103}
104
105impl<'m, 's> ResourceView<'m, 's> {
106 pub fn organization_relationship(
108 &self,
109 id: EntityId,
110 ) -> ResourceResult<OrganizationRelationship<'m, 's>> {
111 OrganizationRelationship::from_record(self.record(id, "IfcOrganizationRelationship")?)
112 }
113}