use dicom_toolkit_dict::ts::{transfer_syntaxes, ByteOrder, PixelEncoding, VrEncoding};
use dicom_toolkit_dict::{tags, Tag, Vr};
pub struct TransferSyntaxProperties {
pub byte_order: ByteOrder,
pub vr_encoding: VrEncoding,
pub is_deflated: bool,
pub is_encapsulated: bool,
}
impl TransferSyntaxProperties {
pub fn from_uid(uid: &str) -> Self {
if let Some(ts) = transfer_syntaxes::by_uid(uid) {
Self {
byte_order: ts.byte_order,
vr_encoding: ts.vr_encoding,
is_deflated: ts.deflated,
is_encapsulated: ts.pixel_encoding == PixelEncoding::Encapsulated,
}
} else {
Self {
byte_order: ByteOrder::LittleEndian,
vr_encoding: VrEncoding::Explicit,
is_deflated: false,
is_encapsulated: false,
}
}
}
pub fn is_little_endian(&self) -> bool {
self.byte_order == ByteOrder::LittleEndian
}
pub fn is_explicit_vr(&self) -> bool {
self.vr_encoding == VrEncoding::Explicit
}
}
pub fn implicit_vr_for_tag(tag: Tag) -> Vr {
match tag {
tags::FILE_META_INFORMATION_GROUP_LENGTH => Vr::UL,
tags::FILE_META_INFORMATION_VERSION => Vr::OB,
tags::MEDIA_STORAGE_SOP_CLASS_UID => Vr::UI,
tags::MEDIA_STORAGE_SOP_INSTANCE_UID => Vr::UI,
tags::TRANSFER_SYNTAX_UID => Vr::UI,
tags::IMPLEMENTATION_CLASS_UID => Vr::UI,
tags::IMPLEMENTATION_VERSION_NAME => Vr::SH,
tags::SPECIFIC_CHARACTER_SET => Vr::CS,
tags::IMAGE_TYPE => Vr::CS,
tags::SOP_CLASS_UID => Vr::UI,
tags::SOP_INSTANCE_UID => Vr::UI,
tags::STUDY_DATE => Vr::DA,
tags::SERIES_DATE => Vr::DA,
tags::ACQUISITION_DATE => Vr::DA,
tags::CONTENT_DATE => Vr::DA,
tags::STUDY_TIME => Vr::TM,
tags::SERIES_TIME => Vr::TM,
tags::ACQUISITION_TIME => Vr::TM,
tags::CONTENT_TIME => Vr::TM,
tags::ACCESSION_NUMBER => Vr::SH,
tags::MODALITY => Vr::CS,
tags::MANUFACTURER => Vr::LO,
tags::INSTITUTION_NAME => Vr::LO,
tags::REFERRING_PHYSICIAN_NAME => Vr::PN,
tags::STUDY_DESCRIPTION => Vr::LO,
tags::SERIES_DESCRIPTION => Vr::LO,
tags::PERFORMING_PHYSICIAN_NAME => Vr::PN,
tags::OPERATORS_NAME => Vr::PN,
tags::REFERENCED_SOP_CLASS_UID => Vr::UI,
tags::REFERENCED_SOP_INSTANCE_UID => Vr::UI,
tags::PATIENT_NAME => Vr::PN,
tags::PATIENT_ID => Vr::LO,
tags::PATIENT_BIRTH_DATE => Vr::DA,
tags::PATIENT_SEX => Vr::CS,
tags::PATIENT_AGE => Vr::AS,
tags::PATIENT_SIZE => Vr::DS,
tags::PATIENT_WEIGHT => Vr::DS,
tags::STUDY_INSTANCE_UID => Vr::UI,
tags::SERIES_INSTANCE_UID => Vr::UI,
tags::STUDY_ID => Vr::SH,
tags::SERIES_NUMBER => Vr::IS,
tags::ACQUISITION_NUMBER => Vr::IS,
tags::INSTANCE_NUMBER => Vr::IS,
tags::IMAGE_POSITION_PATIENT => Vr::DS,
tags::IMAGE_ORIENTATION_PATIENT => Vr::DS,
tags::FRAME_OF_REFERENCE_UID => Vr::UI,
tags::SLICE_LOCATION => Vr::DS,
tags::NUMBER_OF_FRAMES => Vr::IS,
tags::SAMPLES_PER_PIXEL => Vr::US,
tags::PHOTOMETRIC_INTERPRETATION => Vr::CS,
tags::ROWS => Vr::US,
tags::COLUMNS => Vr::US,
tags::BITS_ALLOCATED => Vr::US,
tags::BITS_STORED => Vr::US,
tags::HIGH_BIT => Vr::US,
tags::PIXEL_REPRESENTATION => Vr::US,
tags::PLANAR_CONFIGURATION => Vr::US,
tags::PIXEL_DATA => Vr::OW,
tags::WINDOW_CENTER => Vr::DS,
tags::WINDOW_WIDTH => Vr::DS,
tags::RESCALE_INTERCEPT => Vr::DS,
tags::RESCALE_SLOPE => Vr::DS,
_ => Vr::UN,
}
}