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 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")] #[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}