Skip to main content

haste_repository/types/
mod.rs

1use haste_fhir_client::request::FHIRRequest;
2use serde::Serialize;
3use std::fmt::{Debug, Display};
4
5pub mod authorization_code;
6pub mod membership;
7pub mod mfa;
8pub mod project;
9pub mod scope;
10pub mod subscription;
11pub mod tenant;
12pub mod user;
13
14#[derive(Clone, Debug, PartialEq, PartialOrd, sqlx::Type, serde::Deserialize, Serialize)]
15#[sqlx(type_name = "fhir_version", rename_all = "lowercase")] // only for PostgreSQL to match a type definition
16#[serde(rename_all = "lowercase")]
17pub enum SupportedFHIRVersions {
18    R4,
19}
20
21impl Display for SupportedFHIRVersions {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        match self {
24            SupportedFHIRVersions::R4 => write!(f, "r4"),
25        }
26    }
27}
28
29#[derive(sqlx::Type, Debug, Clone)]
30#[sqlx(type_name = "fhir_method", rename_all = "lowercase")]
31pub enum FHIRMethod {
32    Create,
33    Read,
34    Update,
35    Delete,
36}
37
38impl FHIRMethod {
39    #[must_use]
40    pub fn as_str(&self) -> &'static str {
41        match self {
42            FHIRMethod::Create => "create",
43            FHIRMethod::Read => "read",
44            FHIRMethod::Update => "update",
45            FHIRMethod::Delete => "delete",
46        }
47    }
48}
49
50impl TryFrom<&str> for FHIRMethod {
51    type Error = String;
52
53    fn try_from(value: &str) -> Result<Self, Self::Error> {
54        match value.to_lowercase().as_str() {
55            "create" => Ok(FHIRMethod::Create),
56            "read" => Ok(FHIRMethod::Read),
57            "update" => Ok(FHIRMethod::Update),
58            "delete" => Ok(FHIRMethod::Delete),
59            _ => Err(format!("Unsupported FHIR method: {value}")),
60        }
61    }
62}
63
64impl TryFrom<&FHIRRequest> for FHIRMethod {
65    type Error = String;
66
67    fn try_from(request: &FHIRRequest) -> Result<Self, Self::Error> {
68        match request {
69            FHIRRequest::Create(_) => Ok(FHIRMethod::Create),
70            FHIRRequest::Read(_) => Ok(FHIRMethod::Read),
71            FHIRRequest::Update(_) => Ok(FHIRMethod::Update),
72            FHIRRequest::Delete(_) => Ok(FHIRMethod::Delete),
73            _ => Err("Unsupported FHIR request".to_string()),
74        }
75    }
76}