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