#[cfg(feature = "python")] use pyo3::types::{PyDict, PyInt, PyString}; #[cfg(feature = "python")] use pyo3::{Bound, IntoPyObject, PyErr, PyResult, Python}; use serde::{Deserialize, Serialize}; #[cfg(feature = "python")] macro_rules! impl_enum_into_py_object { ($($t:ty $(,)?)*) => { $( impl<'py> IntoPyObject<'py> for $t { type Target = PyString; type Output = Bound<'py, Self::Target>; type Error = PyErr; fn into_pyobject(self, py: Python<'py>) -> PyResult { Ok(format!("{:?}", self).into_pyobject(py)?) } } )* }; } #[cfg(feature = "python")] macro_rules! impl_empty_struct_into_py_object { ($($t:ty $(,)?)*) => { $( impl<'py> IntoPyObject<'py> for $t { type Target = PyInt; type Output = Bound<'py, Self::Target>; type Error = PyErr; fn into_pyobject(self, py: Python<'py>) -> PyResult { Ok(0usize.into_pyobject(py)?) } } )* }; } #[cfg(feature = "python")] macro_rules! impl_boxed_struct_into_py_object { ($($t:ty $(,)?)*) => { $( impl<'py> IntoPyObject<'py> for Box<$t> { type Target = PyDict; type Output = Bound<'py, Self::Target>; type Error = PyErr; fn into_pyobject(self, py: Python<'py>) -> PyResult { (*self).into_pyobject(py) } } )* }; } #[cfg(feature = "python")] impl_enum_into_py_object!( ArcType, BinDataCompressionType, BinningType, ChannelIlluminationType, ChannelAcquisitionModeType, ChannelContrastMethodType, DetectorType, ExperimentItemType, FilamentType, FilterType, FontFamilyType, LaserType, LaserLaserMediumType, LaserPulseType, MarkerType, MicrobeamManipulationItemType, MicroscopeType, NamingConventionType, ObjectiveCorrectionType, ObjectiveImmersionType, ObjectiveSettingsMediumType, PixelsDimensionOrderType, PixelType, ShapeFillRuleType, ShapeFontStyleType UnitsElectricPotentialType, UnitsFrequencyType, UnitsLengthType, UnitsPowerType, UnitsPressureType, UnitsTemperatureType, UnitsTimeType, ); #[cfg(feature = "python")] impl_empty_struct_into_py_object!(MetadataOnly, XmlAnnotationValue); #[cfg(feature = "python")] impl_boxed_struct_into_py_object!(Channel, Image); #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct AffineTransform { #[serde(rename = "@A00")] pub a00: f32, #[serde(rename = "@A10")] pub a10: f32, #[serde(rename = "@A01")] pub a01: f32, #[serde(rename = "@A11")] pub a11: f32, #[serde(rename = "@A02")] pub a02: f32, #[serde(rename = "@A12")] pub a12: f32, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Annotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct AnnotationRef { #[serde(rename = "@ID")] pub id: String, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Arc { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Power")] pub power: Option, #[serde(default = "Arc::default_power_unit", rename = "@PowerUnit")] pub power_unit: UnitsPowerType, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Arc { pub fn default_power_unit() -> UnitsPowerType { UnitsPowerType::W } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ArcType { #[serde(rename = "Hg")] Hg, #[serde(rename = "Xe")] Xe, #[serde(rename = "HgXe")] HgXe, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct BinData { #[serde(default = "BinData::default_compression", rename = "@Compression")] pub compression: BinDataCompressionType, #[serde(rename = "@BigEndian")] pub big_endian: bool, #[serde(rename = "@Length")] pub length: i64, #[serde(rename = "$text")] pub content: String, } impl BinData { pub fn default_compression() -> BinDataCompressionType { BinDataCompressionType::None } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum BinDataCompressionType { #[serde(rename = "zlib")] Zlib, #[serde(rename = "bzip2")] Bzip2, #[serde(rename = "none")] None, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct BinaryFile { #[serde(rename = "@FileName")] pub file_name: String, #[serde(rename = "@Size")] pub size: i64, #[serde(default, rename = "@MIMEType")] pub mime_type: Option, #[serde(rename = "$value")] pub content: BinaryFileContent, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub enum BinaryFileContent { #[serde(rename = "External")] External(External), #[serde(rename = "BinData")] BinData(BinData), } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum BinningType { #[serde(rename = "1x1")] _1X1, #[serde(rename = "2x2")] _2X2, #[serde(rename = "4x4")] _4X4, #[serde(rename = "8x8")] _8X8, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct BooleanAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "Value")] pub value: bool, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Channel { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "@SamplesPerPixel")] pub samples_per_pixel: Option, #[serde(default, rename = "@IlluminationType")] pub illumination_type: Option, #[serde(default, rename = "@PinholeSize")] pub pinhole_size: Option, #[serde( default = "Channel::default_pinhole_size_unit", rename = "@PinholeSizeUnit" )] pub pinhole_size_unit: UnitsLengthType, #[serde(default, rename = "@AcquisitionMode")] pub acquisition_mode: Option, #[serde(default, rename = "@ContrastMethod")] pub contrast_method: Option, #[serde(default, rename = "@ExcitationWavelength")] pub excitation_wavelength: Option, #[serde( default = "Channel::default_excitation_wavelength_unit", rename = "@ExcitationWavelengthUnit" )] pub excitation_wavelength_unit: UnitsLengthType, #[serde(default, rename = "@EmissionWavelength")] pub emission_wavelength: Option, #[serde( default = "Channel::default_emission_wavelength_unit", rename = "@EmissionWavelengthUnit" )] pub emission_wavelength_unit: UnitsLengthType, #[serde(default, rename = "@Fluor")] pub fluor: Option, #[serde(default, rename = "@NDFilter")] pub nd_filter: Option, #[serde(default, rename = "@PockelCellSetting")] pub pockel_cell_setting: Option, #[serde(default = "Channel::default_color", rename = "@Color")] pub color: i32, #[serde(default, rename = "LightSourceSettings")] pub light_source_settings: Option, #[serde(default, rename = "DetectorSettings")] pub detector_settings: Option, #[serde(default, rename = "FilterSetRef")] pub filter_set_ref: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(default, rename = "LightPath")] pub light_path: Option, } impl Channel { pub fn default_pinhole_size_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_color() -> i32 { 0 } pub fn default_excitation_wavelength_unit() -> UnitsLengthType { UnitsLengthType::nm } pub fn default_emission_wavelength_unit() -> UnitsLengthType { UnitsLengthType::nm } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ChannelAcquisitionModeType { #[serde(rename = "WideField")] WideField, #[serde(rename = "LaserScanningConfocalMicroscopy")] LaserScanningConfocalMicroscopy, #[serde(rename = "SpinningDiskConfocal")] SpinningDiskConfocal, #[serde(rename = "SlitScanConfocal")] SlitScanConfocal, #[serde(rename = "MultiPhotonMicroscopy")] MultiPhotonMicroscopy, #[serde(rename = "StructuredIllumination")] StructuredIllumination, #[serde(rename = "SingleMoleculeImaging")] SingleMoleculeImaging, #[serde(rename = "TotalInternalReflection")] TotalInternalReflection, #[serde(rename = "FluorescenceLifetime")] FluorescenceLifetime, #[serde(rename = "SpectralImaging")] SpectralImaging, #[serde(rename = "FluorescenceCorrelationSpectroscopy")] FluorescenceCorrelationSpectroscopy, #[serde(rename = "NearFieldScanningOpticalMicroscopy")] NearFieldScanningOpticalMicroscopy, #[serde(rename = "SecondHarmonicGenerationImaging")] SecondHarmonicGenerationImaging, #[serde(rename = "PALM")] Palm, #[serde(rename = "STORM")] Storm, #[serde(rename = "STED")] Sted, #[serde(rename = "TIRF")] Tirf, #[serde(rename = "FSM")] Fsm, #[serde(rename = "LCM")] Lcm, #[serde(rename = "Other")] Other, #[serde(rename = "BrightField")] BrightField, #[serde(rename = "SweptFieldConfocal")] SweptFieldConfocal, #[serde(rename = "SPIM")] Spim, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ChannelContrastMethodType { #[serde(rename = "Brightfield")] Brightfield, #[serde(rename = "Phase")] Phase, #[serde(rename = "DIC")] Dic, #[serde(rename = "HoffmanModulation")] HoffmanModulation, #[serde(rename = "ObliqueIllumination")] ObliqueIllumination, #[serde(rename = "PolarizedLight")] PolarizedLight, #[serde(rename = "Darkfield")] Darkfield, #[serde(rename = "Fluorescence")] Fluorescence, #[serde(rename = "Other")] Other, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ChannelIlluminationType { #[serde(rename = "Transmitted")] Transmitted, #[serde(rename = "Epifluorescence")] Epifluorescence, #[serde(rename = "Oblique")] Oblique, #[serde(rename = "NonLinear")] NonLinear, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CommentAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "Value")] pub value: String, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Dataset { #[serde(default, rename = "@Name")] pub name: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "ExperimenterRef")] pub experimenter_ref: Option, #[serde(default, rename = "ExperimenterGroupRef")] pub experimenter_group_ref: Option, #[serde(default, rename = "ImageRef")] pub image_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Detector { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(default, rename = "@Gain")] pub gain: Option, #[serde(default, rename = "@Voltage")] pub voltage: Option, #[serde(default = "Detector::default_voltage_unit", rename = "@VoltageUnit")] pub voltage_unit: UnitsElectricPotentialType, #[serde(default, rename = "@Offset")] pub offset: Option, #[serde(default, rename = "@Zoom")] pub zoom: Option, #[serde(default, rename = "@AmplificationGain")] pub amplification_gain: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Detector { pub fn default_voltage_unit() -> UnitsElectricPotentialType { UnitsElectricPotentialType::V } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct DetectorSettings { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Offset")] pub offset: Option, #[serde(default, rename = "@Gain")] pub gain: Option, #[serde(default, rename = "@Voltage")] pub voltage: Option, #[serde( default = "DetectorSettings::default_voltage_unit", rename = "@VoltageUnit" )] pub voltage_unit: UnitsElectricPotentialType, #[serde(default, rename = "@Zoom")] pub zoom: Option, #[serde(default, rename = "@ReadOutRate")] pub read_out_rate: Option, #[serde( default = "DetectorSettings::default_read_out_rate_unit", rename = "@ReadOutRateUnit" )] pub read_out_rate_unit: UnitsFrequencyType, #[serde(default, rename = "@Binning")] pub binning: Option, #[serde(default, rename = "@Integration")] pub integration: Option, } impl DetectorSettings { pub fn default_voltage_unit() -> UnitsElectricPotentialType { UnitsElectricPotentialType::V } pub fn default_read_out_rate_unit() -> UnitsFrequencyType { UnitsFrequencyType::Hz } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum DetectorType { #[serde(rename = "CCD")] Ccd, #[serde(rename = "IntensifiedCCD")] IntensifiedCcd, #[serde(rename = "AnalogVideo")] AnalogVideo, #[serde(rename = "PMT")] Pmt, #[serde(rename = "Photodiode")] Photodiode, #[serde(rename = "Spectroscopy")] Spectroscopy, #[serde(rename = "LifetimeImaging")] LifetimeImaging, #[serde(rename = "CorrelationSpectroscopy")] CorrelationSpectroscopy, #[serde(rename = "FTIR")] Ftir, #[serde(rename = "EMCCD")] Emccd, #[serde(rename = "APD")] Apd, #[serde(rename = "CMOS")] Cmos, #[serde(rename = "EBCCD")] Ebccd, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Dichroic { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct DoubleAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "Value")] pub value: f64, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Ellipse { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Ellipse::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde(default = "Ellipse::default_font_size_unit", rename = "@FontSizeUnit")] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@X")] pub x: f32, #[serde(rename = "@Y")] pub y: f32, #[serde(rename = "@RadiusX")] pub radius_x: f32, #[serde(rename = "@RadiusY")] pub radius_y: f32, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Ellipse { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Experiment { #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "ExperimenterRef")] pub experimenter_ref: Option, #[serde(default, rename = "MicrobeamManipulation")] pub microbeam_manipulation: Vec, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ExperimentItemType { #[serde(rename = "FP")] Fp, #[serde(rename = "FRET")] Fret, #[serde(rename = "TimeLapse")] TimeLapse, #[serde(rename = "FourDPlus")] FourDPlus, #[serde(rename = "Screen")] Screen, #[serde(rename = "Immunocytochemistry")] Immunocytochemistry, #[serde(rename = "Immunofluorescence")] Immunofluorescence, #[serde(rename = "FISH")] Fish, #[serde(rename = "Electrophysiology")] Electrophysiology, #[serde(rename = "IonImaging")] IonImaging, #[serde(rename = "Colocalization")] Colocalization, #[serde(rename = "PGIDocumentation")] PgiDocumentation, #[serde(rename = "FluorescenceLifetime")] FluorescenceLifetime, #[serde(rename = "SpectralImaging")] SpectralImaging, #[serde(rename = "Photobleaching")] Photobleaching, #[serde(rename = "SPIM")] Spim, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize, Default)] pub struct ExperimentType(pub Vec); #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Experimenter { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@FirstName")] pub first_name: Option, #[serde(default, rename = "@MiddleName")] pub middle_name: Option, #[serde(default, rename = "@LastName")] pub last_name: Option, #[serde(default, rename = "@Email")] pub email: Option, #[serde(default, rename = "@Institution")] pub institution: Option, #[serde(default, rename = "@UserName")] pub user_name: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ExperimenterGroup { #[serde(default, rename = "@Name")] pub name: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "ExperimenterRef")] pub experimenter_ref: Vec, #[serde(default, rename = "Leader")] pub leader: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct External { #[serde(rename = "@href")] pub href: String, #[serde(rename = "@SHA1")] pub sha_1: String, #[serde(default = "External::default_compression", rename = "@Compression")] pub compression: BinDataCompressionType, } impl External { pub fn default_compression() -> BinDataCompressionType { BinDataCompressionType::None } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Filament { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Power")] pub power: Option, #[serde(default = "Filament::default_power_unit", rename = "@PowerUnit")] pub power_unit: UnitsPowerType, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Filament { pub fn default_power_unit() -> UnitsPowerType { UnitsPowerType::W } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum FilamentType { #[serde(rename = "Incandescent")] Incandescent, #[serde(rename = "Halogen")] Halogen, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct FileAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "BinaryFile")] pub binary_file: BinaryFile, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Filter { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "@FilterWheel")] pub filter_wheel: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "TransmittanceRange")] pub transmittance_range: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct FilterSet { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "ExcitationFilterRef")] pub excitation_filter_ref: Vec, #[serde(default, rename = "DichroicRef")] pub dichroic_ref: Option, #[serde(default, rename = "EmissionFilterRef")] pub emission_filter_ref: Vec, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum FilterType { #[serde(rename = "Dichroic")] Dichroic, #[serde(rename = "LongPass")] LongPass, #[serde(rename = "ShortPass")] ShortPass, #[serde(rename = "BandPass")] BandPass, #[serde(rename = "MultiPass")] MultiPass, #[serde(rename = "NeutralDensity")] NeutralDensity, #[serde(rename = "Tuneable")] Tuneable, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Folder { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "FolderRef")] pub folder_ref: Vec, #[serde(default, rename = "ImageRef")] pub image_ref: Vec, #[serde(default, rename = "ROIRef")] pub roi_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum FontFamilyType { #[serde(rename = "serif")] Serif, #[serde(rename = "sans-serif")] SansSerif, #[serde(rename = "cursive")] Cursive, #[serde(rename = "fantasy")] Fantasy, #[serde(rename = "monospace")] Monospace, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct GenericExcitationSource { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Power")] pub power: Option, #[serde( default = "GenericExcitationSource::default_power_unit", rename = "@PowerUnit" )] pub power_unit: UnitsPowerType, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(default, rename = "Map")] pub map: Option, } impl GenericExcitationSource { pub fn default_power_unit() -> UnitsPowerType { UnitsPowerType::W } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Image { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "AcquisitionDate")] pub acquisition_date: Option, #[serde(default, rename = "ExperimenterRef")] pub experimenter_ref: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "ExperimentRef")] pub experiment_ref: Option, #[serde(default, rename = "ExperimenterGroupRef")] pub experimenter_group_ref: Option, #[serde(default, rename = "InstrumentRef")] pub instrument_ref: Option, #[serde(default, rename = "ObjectiveSettings")] pub objective_settings: Option, #[serde(default, rename = "ImagingEnvironment")] pub imaging_environment: Option, #[serde(default, rename = "StageLabel")] pub stage_label: Option, #[serde(rename = "Pixels")] pub pixels: Pixels, #[serde(default, rename = "ROIRef")] pub roi_ref: Vec, #[serde(default, rename = "MicrobeamManipulationRef")] pub microbeam_manipulation_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ImagingEnvironment { #[serde(default, rename = "@Temperature")] pub temperature: Option, #[serde( default = "ImagingEnvironment::default_temperature_unit", rename = "@TemperatureUnit" )] pub temperature_unit: UnitsTemperatureType, #[serde(default, rename = "@AirPressure")] pub air_pressure: Option, #[serde( default = "ImagingEnvironment::default_air_pressure_unit", rename = "@AirPressureUnit" )] pub air_pressure_unit: UnitsPressureType, #[serde(default, rename = "@Humidity")] pub humidity: Option, #[serde(default, rename = "@CO2Percent")] pub co_2_percent: Option, #[serde(default, rename = "Map")] pub map: Option, } impl ImagingEnvironment { pub fn default_temperature_unit() -> UnitsTemperatureType { UnitsTemperatureType::C } pub fn default_air_pressure_unit() -> UnitsPressureType { UnitsPressureType::atm } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Instrument { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "Microscope")] pub microscope: Option, #[serde(default, rename = "LightSourceGroup")] pub light_source_group: Vec, #[serde(default, rename = "Detector")] pub detector: Vec, #[serde(default, rename = "Objective")] pub objective: Vec, #[serde(default, rename = "FilterSet")] pub filter_set: Vec, #[serde(default, rename = "Filter")] pub filter: Vec, #[serde(default, rename = "Dichroic")] pub dichroic: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Label { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Label::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde(default = "Label::default_font_size_unit", rename = "@FontSizeUnit")] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@X")] pub x: f32, #[serde(rename = "@Y")] pub y: f32, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Label { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Laser { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Power")] pub power: Option, #[serde(default = "Laser::default_power_unit", rename = "@PowerUnit")] pub power_unit: UnitsPowerType, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "@LaserMedium")] pub laser_medium: Option, #[serde(default, rename = "@Wavelength")] pub wavelength: Option, #[serde(default = "Laser::default_wavelength_unit", rename = "@WavelengthUnit")] pub wavelength_unit: UnitsLengthType, #[serde(default, rename = "@FrequencyMultiplication")] pub frequency_multiplication: Option, #[serde(default, rename = "@Tuneable")] pub tuneable: Option, #[serde(default, rename = "@Pulse")] pub pulse: Option, #[serde(default, rename = "@PockelCell")] pub pockel_cell: Option, #[serde(default, rename = "@RepetitionRate")] pub repetition_rate: Option, #[serde( default = "Laser::default_repetition_rate_unit", rename = "@RepetitionRateUnit" )] pub repetition_rate_unit: UnitsFrequencyType, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(default, rename = "Pump")] pub pump: Option, } impl Laser { pub fn default_power_unit() -> UnitsPowerType { UnitsPowerType::mW } pub fn default_wavelength_unit() -> UnitsLengthType { UnitsLengthType::nm } pub fn default_repetition_rate_unit() -> UnitsFrequencyType { UnitsFrequencyType::Hz } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum LaserLaserMediumType { #[serde(rename = "Cu")] Cu, #[serde(rename = "Ag")] Ag, #[serde(rename = "ArFl")] ArFl, #[serde(rename = "ArCl")] ArCl, #[serde(rename = "KrFl")] KrFl, #[serde(rename = "KrCl")] KrCl, #[serde(rename = "XeFl")] XeFl, #[serde(rename = "XeCl")] XeCl, #[serde(rename = "XeBr")] XeBr, #[serde(rename = "N")] N, #[serde(rename = "Ar")] Ar, #[serde(rename = "Kr")] Kr, #[serde(rename = "Xe")] Xe, #[serde(rename = "HeNe")] HeNe, #[serde(rename = "HeCd")] HeCd, #[serde(rename = "CO")] Co, #[serde(rename = "CO2")] Co2, #[serde(rename = "H2O")] H2O, #[serde(rename = "HFl")] Hfl, #[serde(rename = "NdGlass")] NdGlass, #[serde(rename = "NdYAG")] NdYag, #[serde(rename = "ErGlass")] ErGlass, #[serde(rename = "ErYAG")] ErYag, #[serde(rename = "HoYLF")] HoYlf, #[serde(rename = "HoYAG")] HoYag, #[serde(rename = "Ruby")] Ruby, #[serde(rename = "TiSapphire")] TiSapphire, #[serde(rename = "Alexandrite")] Alexandrite, #[serde(rename = "Rhodamine6G")] Rhodamine6G, #[serde(rename = "CoumarinC30")] CoumarinC30, #[serde(rename = "GaAs")] GaAs, #[serde(rename = "GaAlAs")] GaAlAs, #[serde(rename = "EMinus")] Eminus, #[serde(rename = "Other")] Other, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum LaserPulseType { #[serde(rename = "CW")] Cw, #[serde(rename = "Single")] Single, #[serde(rename = "QSwitched")] Qswitched, #[serde(rename = "Repetitive")] Repetitive, #[serde(rename = "ModeLocked")] ModeLocked, #[serde(rename = "Other")] Other, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum LaserType { #[serde(rename = "Excimer")] Excimer, #[serde(rename = "Gas")] Gas, #[serde(rename = "MetalVapor")] MetalVapor, #[serde(rename = "SolidState")] SolidState, #[serde(rename = "Dye")] Dye, #[serde(rename = "Semiconductor")] Semiconductor, #[serde(rename = "FreeElectron")] FreeElectron, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LightEmittingDiode { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Power")] pub power: Option, #[serde( default = "LightEmittingDiode::default_power_unit", rename = "@PowerUnit" )] pub power_unit: UnitsPowerType, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl LightEmittingDiode { pub fn default_power_unit() -> UnitsPowerType { UnitsPowerType::mW } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LightPath { #[serde(default, rename = "ExcitationFilterRef")] pub excitation_filter_ref: Vec, #[serde(default, rename = "DichroicRef")] pub dichroic_ref: Option, #[serde(default, rename = "EmissionFilterRef")] pub emission_filter_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LightSourceType { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Power")] pub power: Option, #[serde(default = "LightSourceType::default_power_unit", rename = "@PowerUnit")] pub power_unit: UnitsPowerType, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl LightSourceType { pub fn default_power_unit() -> UnitsPowerType { UnitsPowerType::mW } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub enum LightSourceGroup { #[serde(rename = "Laser")] Laser(Laser), #[serde(rename = "Arc")] Arc(Arc), #[serde(rename = "Filament")] Filament(Filament), #[serde(rename = "LightEmittingDiode")] LightEmittingDiode(LightEmittingDiode), #[serde(rename = "GenericExcitationSource")] GenericExcitationSource(GenericExcitationSource), } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LightSourceSettings { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Attenuation")] pub attenuation: Option, #[serde(default, rename = "@Wavelength")] pub wavelength: Option, #[serde( default = "LightSourceSettings::default_wavelength_unit", rename = "@WavelengthUnit" )] pub wavelength_unit: UnitsLengthType, } impl LightSourceSettings { pub fn default_wavelength_unit() -> UnitsLengthType { UnitsLengthType::nm } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Line { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Line::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde(default = "Line::default_font_size_unit", rename = "@FontSizeUnit")] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@X1")] pub x1: f32, #[serde(rename = "@Y1")] pub y1: f32, #[serde(rename = "@X2")] pub x2: f32, #[serde(rename = "@Y2")] pub y2: f32, #[serde(default, rename = "@MarkerStart")] pub marker_start: Option, #[serde(default, rename = "@MarkerEnd")] pub marker_end: Option, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Line { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct LongAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "Value")] pub value: i64, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct MapType { #[serde(default, rename = "M")] pub m: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct MapAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "Value")] pub value: MapType, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct MapM { #[serde(default, rename = "@K")] pub k: Option, #[serde(rename = "$text")] pub content: String, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum MarkerType { #[serde(rename = "Arrow")] Arrow, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Mask { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Mask::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde(default = "Mask::default_font_size_unit", rename = "@FontSizeUnit")] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@X")] pub x: f32, #[serde(rename = "@Y")] pub y: f32, #[serde(rename = "@Width")] pub width: f32, #[serde(rename = "@Height")] pub height: f32, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "BinData")] pub bin_data: BinData, } impl Mask { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct MetadataOnly; #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct MicrobeamManipulation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "ROIRef")] pub roi_ref: Vec, #[serde(rename = "ExperimenterRef")] pub experimenter_ref: AnnotationRef, #[serde(default, rename = "LightSourceSettings")] pub light_source_settings: Vec, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum MicrobeamManipulationItemType { #[serde(rename = "FRAP")] Frap, #[serde(rename = "FLIP")] Flip, #[serde(rename = "InverseFRAP")] InverseFrap, #[serde(rename = "Photoablation")] Photoablation, #[serde(rename = "Photoactivation")] Photoactivation, #[serde(rename = "Uncaging")] Uncaging, #[serde(rename = "OpticalTrapping")] OpticalTrapping, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize, Default)] pub struct MicrobeamManipulationType(pub Vec); #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Microscope { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(default, rename = "@Type")] pub r#type: Option, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum MicroscopeType { #[serde(rename = "Upright")] Upright, #[serde(rename = "Inverted")] Inverted, #[serde(rename = "Dissection")] Dissection, #[serde(rename = "Electrophysiology")] Electrophysiology, #[serde(rename = "Other")] Other, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum NamingConventionType { #[serde(rename = "letter")] Letter, #[serde(rename = "number")] Number, } /// The root of the metadata, create this by parsing an XML string. /// ``` /// use ome_metadata::Ome; /// /// let xml = r#" /// /// 2025-01-29T14:42:42 /// /// /// /// /// /// /// /// /// "#; /// /// let ome: Ome = xml.parse().unwrap(); /// let image = &ome.image.unwrap()[0]; /// println!("acquisition date: {:#?}", image.acquisition_date); /// ``` #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Ome { #[serde(default, rename = "@UUID")] pub uuid: Option, #[serde(default, rename = "@Creator")] pub creator: Option, #[serde(rename = "Rights")] pub rights: Option, #[serde(rename = "Project")] pub project: Option>, #[serde(rename = "Dataset")] pub dataset: Option>, #[serde(rename = "Folder")] pub folder: Option>, #[serde(rename = "Experiment")] pub experiment: Option>, #[serde(rename = "Plate")] pub plate: Option>, #[serde(rename = "Screen")] pub screen: Option>, #[serde(rename = "Experimenter")] pub experimenter: Option>, #[serde(rename = "ExperimenterGroup")] pub experimenter_group: Option>, #[serde(rename = "Instrument")] pub instrument: Option>, #[serde(rename = "Image")] pub image: Option>, #[serde(rename = "StructuredAnnotations")] pub structured_annotations: Option, #[serde(rename = "ROI")] pub roi: Option>, #[serde(rename = "BinaryOnly")] pub binary_only: Option, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Objective { #[serde(default, rename = "@Manufacturer")] pub manufacturer: Option, #[serde(default, rename = "@Model")] pub model: Option, #[serde(default, rename = "@SerialNumber")] pub serial_number: Option, #[serde(default, rename = "@LotNumber")] pub lot_number: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Correction")] pub correction: Option, #[serde(default, rename = "@Immersion")] pub immersion: Option, #[serde(default, rename = "@LensNA")] pub lens_na: Option, #[serde(default, rename = "@NominalMagnification")] pub nominal_magnification: Option, #[serde(default, rename = "@CalibratedMagnification")] pub calibrated_magnification: Option, #[serde(default, rename = "@WorkingDistance")] pub working_distance: Option, #[serde( default = "Objective::default_working_distance_unit", rename = "@WorkingDistanceUnit" )] pub working_distance_unit: UnitsLengthType, #[serde(default, rename = "@Iris")] pub iris: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Objective { pub fn default_working_distance_unit() -> UnitsLengthType { UnitsLengthType::um } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ObjectiveCorrectionType { #[serde(rename = "UV")] Uv, #[serde(rename = "PlanApo")] PlanApo, #[serde(rename = "PlanFluor")] PlanFluor, #[serde(rename = "SuperFluor")] SuperFluor, #[serde(rename = "VioletCorrected")] VioletCorrected, #[serde(rename = "Achro")] Achro, #[serde(rename = "Achromat")] Achromat, #[serde(rename = "Fluor")] Fluor, #[serde(rename = "Fl")] Fl, #[serde(rename = "Fluar")] Fluar, #[serde(rename = "Neofluar")] Neofluar, #[serde(rename = "Fluotar")] Fluotar, #[serde(rename = "Apo")] Apo, #[serde(rename = "PlanNeofluar")] PlanNeofluar, #[serde(rename = "Other")] Other, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ObjectiveImmersionType { #[serde(rename = "Oil")] Oil, #[serde(rename = "Water")] Water, #[serde(rename = "WaterDipping")] WaterDipping, #[serde(rename = "Air")] Air, #[serde(rename = "Multi")] Multi, #[serde(rename = "Glycerol")] Glycerol, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ObjectiveSettings { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@CorrectionCollar")] pub correction_collar: Option, #[serde(default, rename = "@Medium")] pub medium: Option, #[serde(default, rename = "@RefractiveIndex")] pub refractive_index: Option, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ObjectiveSettingsMediumType { #[serde(rename = "Air")] Air, #[serde(rename = "Oil")] Oil, #[serde(rename = "Water")] Water, #[serde(rename = "Glycerol")] Glycerol, #[serde(rename = "Other")] Other, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct OmeBinaryOnly { #[serde(rename = "@MetadataFile")] pub metadata_file: String, #[serde(rename = "@UUID")] pub uuid: String, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum PixelType { #[serde(rename = "int8")] Int8, #[serde(rename = "int16")] Int16, #[serde(rename = "int32")] Int32, #[serde(rename = "uint8")] Uint8, #[serde(rename = "uint16")] Uint16, #[serde(rename = "uint32")] Uint32, #[serde(rename = "float")] Float, #[serde(rename = "double")] Double, #[serde(rename = "complex")] Complex, #[serde(rename = "double-complex")] DoubleComplex, #[serde(rename = "bit")] Bit, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Pixels { #[serde(rename = "@ID")] pub id: String, #[serde(rename = "@DimensionOrder")] pub dimension_order: PixelsDimensionOrderType, #[serde(rename = "@Type")] pub r#type: PixelType, #[serde(default, rename = "@SignificantBits")] pub significant_bits: Option, #[serde(default, rename = "@Interleaved")] pub interleaved: Option, #[serde(default, rename = "@BigEndian")] pub big_endian: Option, #[serde(rename = "@SizeX")] pub size_x: i32, #[serde(rename = "@SizeY")] pub size_y: i32, #[serde(rename = "@SizeZ")] pub size_z: i32, #[serde(rename = "@SizeC")] pub size_c: i32, #[serde(rename = "@SizeT")] pub size_t: i32, #[serde(default, rename = "@PhysicalSizeX")] pub physical_size_x: Option, #[serde( default = "Pixels::default_physical_size_x_unit", rename = "@PhysicalSizeXUnit" )] pub physical_size_x_unit: UnitsLengthType, #[serde(default, rename = "@PhysicalSizeY")] pub physical_size_y: Option, #[serde( default = "Pixels::default_physical_size_y_unit", rename = "@PhysicalSizeYUnit" )] pub physical_size_y_unit: UnitsLengthType, #[serde(default, rename = "@PhysicalSizeZ")] pub physical_size_z: Option, #[serde( default = "Pixels::default_physical_size_z_unit", rename = "@PhysicalSizeZUnit" )] pub physical_size_z_unit: UnitsLengthType, #[serde(default, rename = "@TimeIncrement")] pub time_increment: Option, #[serde( default = "Pixels::default_time_increment_unit", rename = "@TimeIncrementUnit" )] pub time_increment_unit: UnitsTimeType, #[serde(rename = "Channel")] pub channel: Vec, #[serde(rename = "BinData")] pub bin_data: Option, #[serde(rename = "TiffData")] pub tiff_data: Option, #[serde(rename = "MetadataOnly")] pub metadata_only: Option, #[serde(rename = "Plane")] pub plane: Option>, } impl Pixels { pub fn default_physical_size_x_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_physical_size_y_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_physical_size_z_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_time_increment_unit() -> UnitsTimeType { UnitsTimeType::s } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum PixelsDimensionOrderType { #[serde(rename = "XYZCT")] Xyzct, #[serde(rename = "XYZTC")] Xyztc, #[serde(rename = "XYCTZ")] Xyctz, #[serde(rename = "XYCZT")] Xyczt, #[serde(rename = "XYTCZ")] Xytcz, #[serde(rename = "XYTZC")] Xytzc, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Plane { #[serde(rename = "@TheZ")] pub the_z: i32, #[serde(rename = "@TheT")] pub the_t: i32, #[serde(rename = "@TheC")] pub the_c: i32, #[serde(default, rename = "@DeltaT")] pub delta_t: Option, #[serde(default = "Plane::default_delta_t_unit", rename = "@DeltaTUnit")] pub delta_t_unit: UnitsTimeType, #[serde(default, rename = "@ExposureTime")] pub exposure_time: Option, #[serde( default = "Plane::default_exposure_time_unit", rename = "@ExposureTimeUnit" )] pub exposure_time_unit: UnitsTimeType, #[serde(default, rename = "@PositionX")] pub position_x: Option, #[serde(default = "Plane::default_position_x_unit", rename = "@PositionXUnit")] pub position_x_unit: UnitsLengthType, #[serde(default, rename = "@PositionY")] pub position_y: Option, #[serde(default = "Plane::default_position_y_unit", rename = "@PositionYUnit")] pub position_y_unit: UnitsLengthType, #[serde(default, rename = "@PositionZ")] pub position_z: Option, #[serde(default = "Plane::default_position_z_unit", rename = "@PositionZUnit")] pub position_z_unit: UnitsLengthType, #[serde(rename = "HashSHA1")] pub hash_sha1: Option, #[serde(rename = "AnnotationRef")] pub annotation_ref: Option, } impl Plane { pub fn default_delta_t_unit() -> UnitsTimeType { UnitsTimeType::s } pub fn default_exposure_time_unit() -> UnitsTimeType { UnitsTimeType::s } pub fn default_position_x_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_position_y_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_position_z_unit() -> UnitsLengthType { UnitsLengthType::um } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Plate { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "@Status")] pub status: Option, #[serde(default, rename = "@ExternalIdentifier")] pub external_identifier: Option, #[serde(default, rename = "@ColumnNamingConvention")] pub column_naming_convention: Option, #[serde(default, rename = "@RowNamingConvention")] pub row_naming_convention: Option, #[serde(default, rename = "@WellOriginX")] pub well_origin_x: Option, #[serde( default = "Plate::default_well_origin_x_unit", rename = "@WellOriginXUnit" )] pub well_origin_x_unit: UnitsLengthType, #[serde(default, rename = "@WellOriginY")] pub well_origin_y: Option, #[serde( default = "Plate::default_well_origin_y_unit", rename = "@WellOriginYUnit" )] pub well_origin_y_unit: UnitsLengthType, #[serde(default, rename = "@Rows")] pub rows: Option, #[serde(default, rename = "@Columns")] pub columns: Option, #[serde(default, rename = "@FieldIndex")] pub field_index: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "Well")] pub well: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(default, rename = "PlateAcquisition")] pub plate_acquisition: Vec, } impl Plate { pub fn default_well_origin_x_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_well_origin_y_unit() -> UnitsLengthType { UnitsLengthType::um } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct PlateAcquisition { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "@EndTime")] pub end_time: Option, #[serde(default, rename = "@StartTime")] pub start_time: Option, #[serde(default, rename = "@MaximumFieldCount")] pub maximum_field_count: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "WellSampleRef")] pub well_sample_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Polygon { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Polygon::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde(default = "Polygon::default_font_size_unit", rename = "@FontSizeUnit")] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@Points")] pub points: String, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Polygon { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Polyline { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Polyline::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde(default = "Polyline::default_font_size_unit", rename = "@FontSizeUnit")] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@Points")] pub points: String, #[serde(default, rename = "@MarkerStart")] pub marker_start: Option, #[serde(default, rename = "@MarkerEnd")] pub marker_end: Option, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Polyline { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Project { #[serde(default, rename = "@Name")] pub name: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "ExperimenterRef")] pub experimenter_ref: Option, #[serde(default, rename = "ExperimenterGroupRef")] pub experimenter_group_ref: Option, #[serde(default, rename = "DatasetRef")] pub dataset_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Roi { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(rename = "Union")] pub union: Option, #[serde(rename = "AnnotationRef")] pub annotation_ref: Option, #[serde(rename = "Description")] pub description: Option, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Reagent { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "@ReagentIdentifier")] pub reagent_identifier: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Rectangle { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "Rectangle::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde( default = "Rectangle::default_font_size_unit", rename = "@FontSizeUnit" )] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(rename = "@X")] pub x: f32, #[serde(rename = "@Y")] pub y: f32, #[serde(rename = "@Width")] pub width: f32, #[serde(rename = "@Height")] pub height: f32, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Rectangle { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Rights { #[serde(default, rename = "RightsHolder")] pub rights_holder: Option, #[serde(default, rename = "RightsHeld")] pub rights_held: Option, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct RoiUnion { #[serde(default, rename = "ShapeGroup")] pub shape_group: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Screen { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Name")] pub name: Option, #[serde(default, rename = "@ProtocolIdentifier")] pub protocol_identifier: Option, #[serde(default, rename = "@ProtocolDescription")] pub protocol_description: Option, #[serde(default, rename = "@ReagentSetDescription")] pub reagent_set_description: Option, #[serde(default, rename = "@ReagentSetIdentifier")] pub reagent_set_identifier: Option, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "Reagent")] pub reagent: Vec, #[serde(default, rename = "PlateRef")] pub plate_ref: Vec, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ShapeType { #[serde(default, rename = "@FillColor")] pub fill_color: Option, #[serde(default, rename = "@FillRule")] pub fill_rule: Option, #[serde(default, rename = "@StrokeColor")] pub stroke_color: Option, #[serde(default, rename = "@StrokeWidth")] pub stroke_width: Option, #[serde( default = "ShapeType::default_stroke_width_unit", rename = "@StrokeWidthUnit" )] pub stroke_width_unit: UnitsLengthType, #[serde(default, rename = "@StrokeDashArray")] pub stroke_dash_array: Option, #[serde(default, rename = "@Text")] pub text: Option, #[serde(default, rename = "@FontFamily")] pub font_family: Option, #[serde(default, rename = "@FontSize")] pub font_size: Option, #[serde( default = "ShapeType::default_font_size_unit", rename = "@FontSizeUnit" )] pub font_size_unit: UnitsLengthType, #[serde(default, rename = "@FontStyle")] pub font_style: Option, #[serde(default, rename = "@Locked")] pub locked: Option, #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@TheZ")] pub the_z: Option, #[serde(default, rename = "@TheT")] pub the_t: Option, #[serde(default, rename = "@TheC")] pub the_c: Option, #[serde(default, rename = "Transform")] pub transform: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl ShapeType { pub fn default_stroke_width_unit() -> UnitsLengthType { UnitsLengthType::Pixel } pub fn default_font_size_unit() -> UnitsLengthType { UnitsLengthType::Pixel } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ShapeFillRuleType { #[serde(rename = "EvenOdd")] EvenOdd, #[serde(rename = "NonZero")] NonZero, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ShapeFontStyleType { #[serde(rename = "Bold")] Bold, #[serde(rename = "BoldItalic")] BoldItalic, #[serde(rename = "Italic")] Italic, #[serde(rename = "Normal")] Normal, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ShapeGroup { #[serde(rename = "Rectangle")] Rectangle(Rectangle), #[serde(rename = "Mask")] Mask(Mask), #[serde(rename = "Point")] Point(Label), #[serde(rename = "Ellipse")] Ellipse(Ellipse), #[serde(rename = "Line")] Line(Line), #[serde(rename = "Polyline")] Polyline(Polyline), #[serde(rename = "Polygon")] Polygon(Polygon), #[serde(rename = "Label")] Label(Label), } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct StageLabel { #[serde(rename = "@Name")] pub name: String, #[serde(default, rename = "@X")] pub x: Option, #[serde(default = "StageLabel::default_x_unit", rename = "@XUnit")] pub x_unit: UnitsLengthType, #[serde(default, rename = "@Y")] pub y: Option, #[serde(default = "StageLabel::default_y_unit", rename = "@YUnit")] pub y_unit: UnitsLengthType, #[serde(default, rename = "@Z")] pub z: Option, #[serde(default = "StageLabel::default_z_unit", rename = "@ZUnit")] pub z_unit: UnitsLengthType, } impl StageLabel { pub fn default_x_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_y_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_z_unit() -> UnitsLengthType { UnitsLengthType::um } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct StructuredAnnotations { #[serde(default, rename = "$value")] pub content: Option, } #[allow(clippy::enum_variant_names)] #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub enum StructuredAnnotationsContent { #[serde(rename = "XMLAnnotation")] XmlAnnotation(XmlAnnotation), #[serde(rename = "FileAnnotation")] FileAnnotation(FileAnnotation), #[serde(rename = "ListAnnotation")] ListAnnotation(Annotation), #[serde(rename = "LongAnnotation")] LongAnnotation(LongAnnotation), #[serde(rename = "DoubleAnnotation")] DoubleAnnotation(DoubleAnnotation), #[serde(rename = "CommentAnnotation")] CommentAnnotation(CommentAnnotation), #[serde(rename = "BooleanAnnotation")] BooleanAnnotation(BooleanAnnotation), #[serde(rename = "TimestampAnnotation")] TimestampAnnotation(CommentAnnotation), #[serde(rename = "TagAnnotation")] TagAnnotation(CommentAnnotation), #[serde(rename = "TermAnnotation")] TermAnnotation(CommentAnnotation), #[serde(rename = "MapAnnotation")] MapAnnotation(MapAnnotation), } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct TiffData { #[serde(default = "TiffData::default_ifd", rename = "@IFD")] pub ifd: i32, #[serde(default = "TiffData::default_first_z", rename = "@FirstZ")] pub first_z: i32, #[serde(default = "TiffData::default_first_t", rename = "@FirstT")] pub first_t: i32, #[serde(default = "TiffData::default_first_c", rename = "@FirstC")] pub first_c: i32, #[serde(default, rename = "@PlaneCount")] pub plane_count: Option, #[serde(default, rename = "UUID")] pub uuid: Option, } impl TiffData { pub fn default_ifd() -> i32 { 0 } pub fn default_first_z() -> i32 { 0 } pub fn default_first_t() -> i32 { 0 } pub fn default_first_c() -> i32 { 0 } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct TiffDataUuid { #[serde(default, rename = "@FileName")] pub file_name: Option, #[serde(rename = "$text")] pub content: String, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct TransmittanceRange { #[serde(default, rename = "@CutIn")] pub cut_in: Option, #[serde( default = "TransmittanceRange::default_cut_in_unit", rename = "@CutInUnit" )] pub cut_in_unit: UnitsLengthType, #[serde(default, rename = "@CutOut")] pub cut_out: Option, #[serde( default = "TransmittanceRange::default_cut_out_unit", rename = "@CutOutUnit" )] pub cut_out_unit: UnitsLengthType, #[serde(default, rename = "@CutInTolerance")] pub cut_in_tolerance: Option, #[serde( default = "TransmittanceRange::default_cut_in_tolerance_unit", rename = "@CutInToleranceUnit" )] pub cut_in_tolerance_unit: UnitsLengthType, #[serde(default, rename = "@CutOutTolerance")] pub cut_out_tolerance: Option, #[serde( default = "TransmittanceRange::default_cut_out_tolerance_unit", rename = "@CutOutToleranceUnit" )] pub cut_out_tolerance_unit: UnitsLengthType, #[serde(default, rename = "@Transmittance")] pub transmittance: Option, } impl TransmittanceRange { pub fn default_cut_in_unit() -> UnitsLengthType { UnitsLengthType::m } pub fn default_cut_out_unit() -> UnitsLengthType { UnitsLengthType::m } pub fn default_cut_in_tolerance_unit() -> UnitsLengthType { UnitsLengthType::m } pub fn default_cut_out_tolerance_unit() -> UnitsLengthType { UnitsLengthType::m } } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsElectricPotentialType { YV, ZV, EV, PV, TV, GV, MV, kV, hV, daV, V, dV, cV, mV, #[serde(rename = "µV")] uV, nV, pV, fV, aV, zV, yV, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsFrequencyType { YHz, ZHz, EHz, PHz, THz, GHz, MHz, kHz, hHz, daHz, Hz, dHz, cHz, mHz, #[serde(rename = "µHz")] uHz, nHz, pHz, fHz, aHz, zHz, yHz, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsLengthType { Ym, Zm, Em, Pm, Tm, Gm, Mm, km, hm, dam, m, dm, cm, mm, #[serde(rename = "µm")] um, nm, pm, fm, am, zm, ym, #[serde(rename = "Å")] A, #[serde(rename = "thou")] Thou, #[serde(rename = "li")] Li, #[serde(rename = "in")] In, #[serde(rename = "ft")] Ft, #[serde(rename = "yd")] Yd, #[serde(rename = "mi")] Mi, #[serde(rename = "ua")] Ua, #[serde(rename = "ly")] Ly, #[serde(rename = "pc")] Pc, #[serde(rename = "pt")] Pt, #[serde(rename = "pixel")] Pixel, #[serde(rename = "reference frame")] ReferenceFrame, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsPowerType { YW, ZW, EW, PW, TW, GW, MW, kW, hW, daW, W, dW, cW, mW, #[serde(rename = "µW")] uW, nW, pW, fW, aW, zW, yW, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsPressureType { YPa, ZPa, EPa, PPa, TPa, GPa, MPa, kPa, hPa, daPa, Pa, dPa, cPa, mPa, #[serde(rename = "µPa")] uPa, nPa, pPa, fPa, aPa, zPa, yPa, bar, Mbar, kbar, dbar, cbar, mbar, atm, psi, Torr, mTorr, #[serde(rename = "mm Hg")] mmHg, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsTemperatureType { #[serde(rename = "°C")] C, #[serde(rename = "°F")] F, #[serde(rename = "K")] K, #[serde(rename = "°R")] R, } #[derive(Clone, Debug, Serialize, Deserialize)] pub enum UnitsTimeType { Ys, Zs, Es, Ps, Ts, Gs, Ms, ks, hs, das, s, ds, cs, ms, #[serde(rename = "µs")] us, ns, ps, fs, r#as, zs, ys, min, h, d, } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Well { #[serde(rename = "@ID")] pub id: String, #[serde(rename = "@Column")] pub column: i32, #[serde(rename = "@Row")] pub row: i32, #[serde(default, rename = "@ExternalDescription")] pub external_description: Option, #[serde(default, rename = "@ExternalIdentifier")] pub external_identifier: Option, #[serde(default, rename = "@Type")] pub r#type: Option, #[serde(default = "Well::default_color", rename = "@Color")] pub color: i32, #[serde(default, rename = "WellSample")] pub well_sample: Vec, #[serde(default, rename = "ReagentRef")] pub reagent_ref: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, } impl Well { pub fn default_color() -> i32 { 0 } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct WellSample { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@PositionX")] pub position_x: Option, #[serde( default = "WellSample::default_position_x_unit", rename = "@PositionXUnit" )] pub position_x_unit: UnitsLengthType, #[serde(default, rename = "@PositionY")] pub position_y: Option, #[serde( default = "WellSample::default_position_y_unit", rename = "@PositionYUnit" )] pub position_y_unit: UnitsLengthType, #[serde(default, rename = "@Timepoint")] pub timepoint: Option, #[serde(rename = "@Index")] pub index: i32, #[serde(default, rename = "ImageRef")] pub image_ref: Option, } impl WellSample { pub fn default_position_x_unit() -> UnitsLengthType { UnitsLengthType::um } pub fn default_position_y_unit() -> UnitsLengthType { UnitsLengthType::um } } #[cfg_attr(feature = "python", derive(IntoPyObject))] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct XmlAnnotation { #[serde(rename = "@ID")] pub id: String, #[serde(default, rename = "@Namespace")] pub namespace: Option, #[serde(default, rename = "@Annotator")] pub annotator: Option, #[serde(default, rename = "Description")] pub description: Option, #[serde(default, rename = "AnnotationRef")] pub annotation_ref: Vec, #[serde(rename = "Value")] pub value: XmlAnnotationValue, } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct XmlAnnotationValue;