haste_repository/types/
mod.rs1use 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")] #[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}