pub const APERIO_PROPERTY_FILENAME: &str = "aperio.Filename";
pub const APERIO_PROPERTY_TITLE: &str = "aperio.Title";
pub const APERIO_PROPERTY_IMAGE_ID: &str = "aperio.ImageID";
pub const APERIO_PROPERTY_DSR_ID: &str = "aperio.DSR ID";
pub const APERIO_PROPERTY_SCANSCOPE_ID: &str = "aperio.ScanScope ID";
pub const APERIO_PROPERTY_DATE: &str = "aperio.Date";
pub const APERIO_PROPERTY_TIME: &str = "aperio.Time";
pub const APERIO_PROPERTY_TIME_ZONE: &str = "aperio.Time Zone";
pub const APERIO_PROPERTY_USER: &str = "aperio.User";
pub const APERIO_PROPERTY_ICC_PROFILE: &str = "aperio.ICC Profile";
pub const APERIO_PROPERTY_PARMSET: &str = "aperio.Parmset";
pub const APERIO_PROPERTY_ORIGINAL_HEIGHT: &str = "aperio.OriginalHeight";
pub const APERIO_PROPERTY_ORIGINAL_WIDTH: &str = "aperio.OriginalWidth";
pub const APERIO_PROPERTY_TOP: &str = "aperio.Top";
pub const APERIO_PROPERTY_LEFT: &str = "aperio.Left";
pub const APERIO_PROPERTY_MPP: &str = "aperio.MPP";
pub const APERIO_PROPERTY_LINE_CAMERA_SKEW: &str = "aperio.LineCameraSkew";
pub const APERIO_PROPERTY_LINE_AREA_XOFFSET: &str = "aperio.LineAreaXOffset";
pub const APERIO_PROPERTY_LINE_AREA_YOFFSET: &str = "aperio.LineAreaYOffset";
pub const APERIO_PROPERTY_FOCUS_OFFSET: &str = "aperio.Focus Offset";
pub const APERIO_PROPERTY_APP_MAP: &str = "aperio.AppMag";
pub const APERIO_PROPERTY_STRIP_WIDTH: &str = "aperio.StripeWidth";
pub const APERIO_PROPERTY_FILTERED: &str = "aperio.Filtered";
pub const APERIO_PROPERTY_DISPLAY_COLOR: &str = "aperio.DisplayColor";
pub const APERIO_PROPERTY_EXPOSURE_TIME: &str = "aperio.Exposure Time";
pub const APERIO_PROPERTY_EXPOSURE_SCALE: &str = "aperio.Exposure Scale";
pub const APERIO_PROPERTY_SESSON_MODE: &str = "aperio.SessonMode";
#[derive(Clone, Debug, Default)]
pub struct Aperio {
pub filename: Option<String>,
pub title: Option<String>,
pub image_id: Option<String>,
pub dsr_id: Option<String>,
pub scan_scope_id: Option<String>,
pub date: Option<String>,
pub time: Option<String>,
pub time_zone: Option<String>,
pub user: Option<String>,
pub icc_profile: Option<String>,
pub parmset: Option<String>,
pub original_height: Option<u32>,
pub original_width: Option<u32>,
pub top: Option<f32>,
pub left: Option<f32>,
pub mpp: Option<f32>,
pub line_camera_skew: Option<f32>,
pub line_area_x_offset: Option<f32>,
pub line_area_y_offset: Option<f32>,
pub focus_offset: Option<f32>,
pub app_mag: Option<u32>,
pub stripe_width: Option<u32>,
pub filtered: Option<u32>,
pub display_color: Option<u32>,
pub exposure_time: Option<u32>,
pub exposure_scale: Option<f32>,
pub sesson_mode: Option<String>,
}
impl Aperio {
pub(crate) fn new(property_iter: impl Iterator<Item = (String, String)>) -> Self {
let mut aperio_property = Aperio::default();
property_iter
.filter(|(name, _)| name.starts_with("aperio."))
.for_each(|(name, value)| aperio_property.parse_property_name(&name, &value));
aperio_property
}
fn parse_property_name(&mut self, name: &str, value: &str) {
match name {
APERIO_PROPERTY_FILENAME => self.filename = Some(value.to_string()),
APERIO_PROPERTY_TITLE => self.title = Some(value.to_string()),
APERIO_PROPERTY_IMAGE_ID => self.image_id = Some(value.to_string()),
APERIO_PROPERTY_DSR_ID => self.dsr_id = Some(value.to_string()),
APERIO_PROPERTY_SCANSCOPE_ID => self.scan_scope_id = Some(value.to_string()),
APERIO_PROPERTY_DATE => self.date = Some(value.to_string()),
APERIO_PROPERTY_TIME => self.time = Some(value.to_string()),
APERIO_PROPERTY_TIME_ZONE => self.time_zone = Some(value.to_string()),
APERIO_PROPERTY_USER => self.user = Some(value.to_string()),
APERIO_PROPERTY_ICC_PROFILE => self.icc_profile = Some(value.to_string()),
APERIO_PROPERTY_PARMSET => self.parmset = Some(String::from(value)),
APERIO_PROPERTY_ORIGINAL_HEIGHT => self.original_height = value.parse().ok(),
APERIO_PROPERTY_ORIGINAL_WIDTH => self.original_width = value.parse().ok(),
APERIO_PROPERTY_TOP => self.top = value.parse().ok(),
APERIO_PROPERTY_LEFT => self.left = value.parse().ok(),
APERIO_PROPERTY_MPP => self.mpp = value.parse().ok(),
APERIO_PROPERTY_LINE_CAMERA_SKEW => self.line_camera_skew = value.parse().ok(),
APERIO_PROPERTY_LINE_AREA_XOFFSET => self.line_area_x_offset = value.parse().ok(),
APERIO_PROPERTY_LINE_AREA_YOFFSET => self.line_area_y_offset = value.parse().ok(),
APERIO_PROPERTY_FOCUS_OFFSET => self.focus_offset = value.parse().ok(),
APERIO_PROPERTY_APP_MAP => self.app_mag = value.parse().ok(),
APERIO_PROPERTY_STRIP_WIDTH => self.stripe_width = value.parse().ok(),
APERIO_PROPERTY_FILTERED => self.filtered = value.parse().ok(),
APERIO_PROPERTY_DISPLAY_COLOR => self.display_color = value.parse().ok(),
APERIO_PROPERTY_EXPOSURE_TIME => self.exposure_time = value.parse().ok(),
APERIO_PROPERTY_EXPOSURE_SCALE => self.exposure_scale = value.parse().ok(),
APERIO_PROPERTY_SESSON_MODE => self.sesson_mode = Some(String::from(value)),
_ => {}
}
}
}