openslide-rs 2.4.0

Rust bindings of OpenSlide C library
Documentation
//! Sakura properties
//!

pub const SAKURA_PROPERTY_CREATOR: &str = "sakura.Creator";
pub const SAKURA_PROPERTY_DATE: &str = "sakura.Date";
pub const SAKURA_PROPERTY_DESCRIPTION: &str = "sakura.Description";
pub const SAKURA_PROPERTY_DIAGNOSIS_CODE: &str = "sakura.DiagnosisCode";
pub const SAKURA_PROPERTY_FOCUSSING_METHOD: &str = "sakura.FocussingMethod";
pub const SAKURA_PROPERTY_KEYWORDS: &str = "sakura.Keywords";
pub const SAKURA_PROPERTY_NOMINAL_LENS_MAGNIFICATION: &str = "sakura.NominalLensMagnification";
pub const SAKURA_PROPERTY_RESOLUTION_MM_PER_PIX: &str = "sakura.ResolutionMmPerPix";
pub const SAKURA_PROPERTY_SCAN_ID: &str = "sakura.ScanId";
pub const SAKURA_PROPERTY_SLIDE_ID: &str = "sakura.SlideId";

#[derive(Clone, Debug, Default)]
pub struct Sakura {
    pub creator: Option<String>,
    pub date: Option<String>,
    pub description: Option<String>,
    pub diagnosis_code: Option<String>,
    pub focussing_method: Option<u32>,
    pub keywords: Option<String>,
    pub nominal_lens_magnification: Option<f32>,
    pub resolution_mm_per_pix: Option<f32>,
    pub scan_id: Option<String>,
    pub slide_id: Option<String>,
}

impl Sakura {
    pub(crate) fn new(property_iter: impl Iterator<Item = (String, String)>) -> Self {
        let mut sakura_property = Sakura::default();
        property_iter
            .filter(|(name, _)| name.starts_with("sakura."))
            .for_each(|(name, value)| sakura_property.parse_property_name(&name, &value));
        sakura_property
    }

    fn parse_property_name(&mut self, name: &str, value: &str) {
        match name {
            SAKURA_PROPERTY_CREATOR => self.creator = value.parse().ok(),
            SAKURA_PROPERTY_DATE => self.date = value.parse().ok(),
            SAKURA_PROPERTY_DESCRIPTION => self.description = value.parse().ok(),
            SAKURA_PROPERTY_DIAGNOSIS_CODE => self.diagnosis_code = value.parse().ok(),
            SAKURA_PROPERTY_FOCUSSING_METHOD => self.focussing_method = value.parse().ok(),
            SAKURA_PROPERTY_KEYWORDS => self.keywords = value.parse().ok(),
            SAKURA_PROPERTY_NOMINAL_LENS_MAGNIFICATION => {
                self.nominal_lens_magnification = value.parse().ok();
            }
            SAKURA_PROPERTY_RESOLUTION_MM_PER_PIX => {
                self.resolution_mm_per_pix = value.parse().ok();
            }
            SAKURA_PROPERTY_SCAN_ID => self.scan_id = value.parse().ok(),
            SAKURA_PROPERTY_SLIDE_ID => self.slide_id = value.parse().ok(),
            _ => {}
        }
    }
}