openslide_rs/properties/
sakura.rs

1//! Sakura properties
2//!
3
4pub const SAKURA_PROPERTY_CREATOR: &str = "sakura.Creator";
5pub const SAKURA_PROPERTY_DATE: &str = "sakura.Date";
6pub const SAKURA_PROPERTY_DESCRIPTION: &str = "sakura.Description";
7pub const SAKURA_PROPERTY_DIAGNOSIS_CODE: &str = "sakura.DiagnosisCode";
8pub const SAKURA_PROPERTY_FOCUSSING_METHOD: &str = "sakura.FocussingMethod";
9pub const SAKURA_PROPERTY_KEYWORDS: &str = "sakura.Keywords";
10pub const SAKURA_PROPERTY_NOMINAL_LENS_MAGNIFICATION: &str = "sakura.NominalLensMagnification";
11pub const SAKURA_PROPERTY_RESOLUTION_MM_PER_PIX: &str = "sakura.ResolutionMmPerPix";
12pub const SAKURA_PROPERTY_SCAN_ID: &str = "sakura.ScanId";
13pub const SAKURA_PROPERTY_SLIDE_ID: &str = "sakura.SlideId";
14
15#[derive(Clone, Debug, Default)]
16pub struct Sakura {
17    pub creator: Option<String>,
18    pub date: Option<String>,
19    pub description: Option<String>,
20    pub diagnosis_code: Option<String>,
21    pub focussing_method: Option<u32>,
22    pub keywords: Option<String>,
23    pub nominal_lens_magnification: Option<f32>,
24    pub resolution_mm_per_pix: Option<f32>,
25    pub scan_id: Option<String>,
26    pub slide_id: Option<String>,
27}
28
29impl Sakura {
30    pub(crate) fn new(property_iter: impl Iterator<Item = (String, String)>) -> Self {
31        let mut sakura_property = Sakura::default();
32        property_iter
33            .filter(|(name, _)| name.starts_with("sakura."))
34            .for_each(|(name, value)| sakura_property.parse_property_name(&name, &value));
35        sakura_property
36    }
37
38    fn parse_property_name(&mut self, name: &str, value: &str) {
39        match name {
40            SAKURA_PROPERTY_CREATOR => self.creator = value.parse().ok(),
41            SAKURA_PROPERTY_DATE => self.date = value.parse().ok(),
42            SAKURA_PROPERTY_DESCRIPTION => self.description = value.parse().ok(),
43            SAKURA_PROPERTY_DIAGNOSIS_CODE => self.diagnosis_code = value.parse().ok(),
44            SAKURA_PROPERTY_FOCUSSING_METHOD => self.focussing_method = value.parse().ok(),
45            SAKURA_PROPERTY_KEYWORDS => self.keywords = value.parse().ok(),
46            SAKURA_PROPERTY_NOMINAL_LENS_MAGNIFICATION => {
47                self.nominal_lens_magnification = value.parse().ok();
48            }
49            SAKURA_PROPERTY_RESOLUTION_MM_PER_PIX => {
50                self.resolution_mm_per_pix = value.parse().ok();
51            }
52            SAKURA_PROPERTY_SCAN_ID => self.scan_id = value.parse().ok(),
53            SAKURA_PROPERTY_SLIDE_ID => self.slide_id = value.parse().ok(),
54            _ => {}
55        }
56    }
57}