Skip to content

Commit

Permalink
feat: Implement creation of References
Browse files Browse the repository at this point in the history
  • Loading branch information
Flix committed Sep 6, 2023
1 parent 03745cc commit aaa5203
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 2 deletions.
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ resolver = "2"

[profile.dev.build-override]
opt-level = 2

[profile.test.build-override]
opt-level = 2
[profile.release.build-override]
opt-level = 2
3 changes: 2 additions & 1 deletion crates/fhir-model/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ serde_json = "1.0.94"

[profile.dev.build-override]
opt-level = 2

[profile.test.build-override]
opt-level = 2
[profile.release.build-override]
opt-level = 2

Expand Down
1 change: 1 addition & 0 deletions crates/fhir-model/src/r4b/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//! Revision 4B types of FHIR.
pub mod codes;
pub mod reference;
pub mod resources;
pub mod types;

Expand Down
51 changes: 51 additions & 0 deletions crates/fhir-model/src/r4b/reference.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//! Extended [`Reference`] functionality.
use super::{
resources::{BaseResource, NamedResource},
types::{Reference, ReferenceInner},
};

/// Create relative [`Reference`] to the given resource.
pub fn create_to<R>(resource: R) -> Option<Reference>
where
R: NamedResource + BaseResource,
{
Some(
ReferenceInner {
id: None,
extension: Vec::new(),
reference: Some(format!("{}/{}", R::TYPE, resource.id().as_ref()?)),
reference_ext: None,
r#type: Some(R::TYPE.to_string()),
type_ext: None,
identifier: None,
identifier_ext: None,
display: None,
display_ext: None,
}
.into(),
)
}

/// Create local [`Reference`] to the given resource. Make sure the resource is
/// going to be in the `contained` field of the referencing resource.
pub fn create_local_to<R>(resource: R) -> Option<Reference>
where
R: NamedResource + BaseResource,
{
Some(
ReferenceInner {
id: None,
extension: Vec::new(),
reference: Some(format!("#{}", resource.id().as_ref()?)),
reference_ext: None,
r#type: Some(R::TYPE.to_string()),
type_ext: None,
identifier: None,
identifier_ext: None,
display: None,
display_ext: None,
}
.into(),
)
}
1 change: 1 addition & 0 deletions crates/fhir-model/src/r5/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//! Revision 5 types of FHIR.
pub mod codes;
pub mod reference;
pub mod resources;
pub mod types;

Expand Down
51 changes: 51 additions & 0 deletions crates/fhir-model/src/r5/reference.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//! Extended [`Reference`] functionality.
use super::{
resources::{BaseResource, NamedResource},
types::{Reference, ReferenceInner},
};

/// Create relative [`Reference`] to the given resource.
pub fn create_to<R>(resource: R) -> Option<Reference>
where
R: NamedResource + BaseResource,
{
Some(
ReferenceInner {
id: None,
extension: Vec::new(),
reference: Some(format!("{}/{}", R::TYPE, resource.id().as_ref()?)),
reference_ext: None,
r#type: Some(R::TYPE.to_string()),
type_ext: None,
identifier: None,
identifier_ext: None,
display: None,
display_ext: None,
}
.into(),
)
}

/// Create local [`Reference`] to the given resource. Make sure the resource is
/// going to be in the `contained` field of the referencing resource.
pub fn create_local_to<R>(resource: R) -> Option<Reference>
where
R: NamedResource + BaseResource,
{
Some(
ReferenceInner {
id: None,
extension: Vec::new(),
reference: Some(format!("#{}", resource.id().as_ref()?)),
reference_ext: None,
r#type: Some(R::TYPE.to_string()),
type_ext: None,
identifier: None,
identifier_ext: None,
display: None,
display_ext: None,
}
.into(),
)
}

0 comments on commit aaa5203

Please sign in to comment.