openslide-rs 2.4.0

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

pub const TIFF_PROPERTY_DESCRIPTION: &str = "tiff.ImageDescription";
pub const TIFF_PROPERTY_SOFTWARE: &str = "tiff.Software";
pub const TIFF_PROPERTY_MODEL: &str = "tiff.Model";
pub const TIFF_PROPERTY_DATETIME: &str = "tiff.DateTime";
pub const TIFF_PROPERTY_MAKE: &str = "tiff.Make";
pub const TIFF_PROPERTY_X_RESOLUTION: &str = "tiff.XResolution";
pub const TIFF_PROPERTY_Y_RESOLUTION: &str = "tiff.YResolution";
pub const TIFF_PROPERTY_RESOLUTION_UNIT: &str = "tiff.ResolutionUnit";
pub const TIFF_PROPERTY_COPYRIGHT: &str = "tiff.Copyright";
pub const TIFF_PROPERTY_HOST_COMPUTER: &str = "tiff.HostComputer";

#[derive(Clone, Debug, Default)]
pub struct Tiff {
    pub image_description: Option<String>,
    pub software: Option<String>,
    pub model: Option<String>,
    pub date_time: Option<String>,
    pub make: Option<String>,
    pub x_resolution: Option<f32>,
    pub y_resolution: Option<f32>,
    pub resolution_unit: Option<String>,
    pub copyright: Option<String>,
    pub host_computer: Option<String>,
}

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

    fn parse_property_name(&mut self, name: &str, value: &str) {
        match name {
            TIFF_PROPERTY_DESCRIPTION => self.image_description = value.parse().ok(),
            TIFF_PROPERTY_SOFTWARE => self.software = value.parse().ok(),
            TIFF_PROPERTY_MODEL => self.model = value.parse().ok(),
            TIFF_PROPERTY_DATETIME => self.date_time = value.parse().ok(),
            TIFF_PROPERTY_MAKE => self.make = value.parse().ok(),
            TIFF_PROPERTY_X_RESOLUTION => self.x_resolution = value.parse().ok(),
            TIFF_PROPERTY_Y_RESOLUTION => self.y_resolution = value.parse().ok(),
            TIFF_PROPERTY_RESOLUTION_UNIT => self.resolution_unit = value.parse().ok(),
            TIFF_PROPERTY_COPYRIGHT => self.copyright = value.parse().ok(),
            TIFF_PROPERTY_HOST_COMPUTER => self.host_computer = value.parse().ok(),
            _ => {}
        }
    }
}