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