use std::fmt::Debug;
use fhir_model::for_all_versions;
use serde::{Serialize, de::DeserializeOwned};
pub trait ParametersExt {
type Parameter: ParameterExt
+ Serialize
+ DeserializeOwned
+ Debug
+ Clone
+ PartialEq
+ Unpin
+ Send
+ Sync;
fn make(parameters: Vec<Option<Self::Parameter>>) -> Self;
}
macro_rules! impl_parameters_ext {
($version:ident) => {
mod $version {
use fhir_model::$version::resources::{Parameters, ParametersParameter};
use super::*;
impl ParametersExt for Parameters {
type Parameter = ParametersParameter;
#[inline]
fn make(parameters: Vec<Option<Self::Parameter>>) -> Self {
#[allow(clippy::unwrap_used, reason = "We know the builder succeeds")]
Self::builder().parameter(parameters).build().unwrap()
}
}
}
};
}
#[cfg(feature = "builders")]
mod helper_module_1 {
use super::*;
for_all_versions!(impl_parameters_ext);
}
pub trait ParameterExt: Sized {
type Value: ParameterValueExt
+ Serialize
+ DeserializeOwned
+ Debug
+ Clone
+ PartialEq
+ Unpin
+ Send
+ Sync;
fn make(name: String, value: Option<Self::Value>, part: Vec<Option<Self>>) -> Self;
}
macro_rules! impl_parameters_parameter_ext {
($version:ident) => {
mod $version {
use fhir_model::$version::resources::{ParametersParameter, ParametersParameterValue};
use super::*;
impl ParameterExt for ParametersParameter {
type Value = ParametersParameterValue;
#[inline]
fn make(name: String, value: Option<Self::Value>, part: Vec<Option<Self>>) -> Self {
#[allow(clippy::unwrap_used, reason = "We know the builder succeeds")]
if let Some(value) = value {
Self::builder().name(name).value(value).part(part).build().unwrap()
} else {
Self::builder().name(name).part(part).build().unwrap()
}
}
}
}
};
}
#[cfg(feature = "builders")]
mod helper_module_2 {
use super::*;
for_all_versions!(impl_parameters_parameter_ext);
}
pub trait ParameterValueExt {
fn make_code(code: String) -> Self;
fn make_string(value: String) -> Self;
fn make_integer(value: i32) -> Self;
}
macro_rules! impl_parameter_value_ext {
($version:ident) => {
mod $version {
use fhir_model::$version::resources::ParametersParameterValue;
use super::*;
impl ParameterValueExt for ParametersParameterValue {
#[inline]
fn make_code(code: String) -> Self {
Self::Code(code)
}
#[inline]
fn make_string(value: String) -> Self {
Self::String(value)
}
#[inline]
fn make_integer(value: i32) -> Self {
Self::Integer(value)
}
}
}
};
}
mod helper_module_3 {
use super::*;
for_all_versions!(impl_parameter_value_ext);
}