use crate::types::{InstanceId, PatientId, SeriesId, StudyId};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct Patient<T> {
#[serde(rename = "ID")]
pub id: PatientId,
pub requested_tags: T,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct Study<T> {
#[serde(rename = "ID")]
pub id: StudyId,
pub requested_tags: T,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct Series<T> {
pub expected_number_of_instances: Option<usize>,
#[serde(rename = "ID")]
pub id: SeriesId,
pub instances: Vec<InstanceId>,
pub is_stable: bool,
pub labels: Vec<String>,
pub last_update: String,
pub parent_study: StudyId,
pub status: SeriesStatus,
pub main_dicom_tags: serde_json::Value,
pub requested_tags: T,
}
#[derive(Serialize, Deserialize, Debug)]
pub enum SeriesStatus {
Unknown,
Missing,
Inconsistent,
Complete,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct Instance<T> {
#[serde(rename = "ID")]
pub id: InstanceId,
pub requested_tags: T,
}
pub trait DicomResource<T> {}
impl<T> DicomResource<T> for Patient<T> {}
impl<T> DicomResource<T> for Study<T> {}
impl<T> DicomResource<T> for Series<T> {}
impl<T> DicomResource<T> for Instance<T> {}