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 TryFrom<&str> for FHIRMethod {
39    type Error = String;
40
41    fn try_from(value: &str) -> Result<Self, Self::Error> {
42        match value.to_lowercase().as_str() {
43            "create" => Ok(FHIRMethod::Create),
44            "read" => Ok(FHIRMethod::Read),
45            "update" => Ok(FHIRMethod::Update),
46            "delete" => Ok(FHIRMethod::Delete),
47            _ => Err(format!("Unsupported FHIR method: {value}")),
48        }
49    }
50}
51
52impl TryFrom<&FHIRRequest> for FHIRMethod {
53    type Error = String;
54
55    fn try_from(request: &FHIRRequest) -> Result<Self, Self::Error> {
56        match request {
57            FHIRRequest::Create(_) => Ok(FHIRMethod::Create),
58            FHIRRequest::Read(_) => Ok(FHIRMethod::Read),
59            FHIRRequest::Update(_) => Ok(FHIRMethod::Update),
60            FHIRRequest::Delete(_) => Ok(FHIRMethod::Delete),
61            _ => Err("Unsupported FHIR request".to_string()),
62        }
63    }
64}