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