- replace from_py_object with derive macro

This commit is contained in:
Wim Pomp committed 2026-10-03 19:18:49 +02:00
1 parent e58b40f9cc
commit f89e60075c
5 files changed
+70 -50

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@ resolver = "3"
members = ["ome-metadata", "ome-metadata-derive"] members = ["ome-metadata", "ome-metadata-derive"]
[workspace.package] [workspace.package]
version = "0.6.0" version = "0.6.1"
edition = "2024" edition = "2024"
rust-version = "1.88.0" rust-version = "1.88.0"
authors = ["Wim Pomp <w.pomp@nki.nl>"] authors = ["Wim Pomp <w.pomp@nki.nl>"]
+7 -7
View File
@@ -1,13 +1,13 @@
[package] [package]
name = "ome-metadata-derive" name = "ome-metadata-derive"
version = "0.6.0" version.workspace = true
edition = "2024" edition.workspace = true
rust-version = "1.88.0" rust-version.workspace = true
authors = ["Wim Pomp <w.pomp@nki.nl>"] authors.workspace = true
license = "MIT OR Apache-2.0" license.workspace = true
homepage.workspace = true
repository.workspace = true
description = "Derive macros for ome-metadata." description = "Derive macros for ome-metadata."
homepage = "https://git.pomppervova.nl/wim/ome-metadata"
repository = "https://git.pomppervova.nl/wim/ome-metadata"
documentation = "https://docs.rs/ome-metadata-derive" documentation = "https://docs.rs/ome-metadata-derive"
readme = "README.md" readme = "README.md"
+20
View File
@@ -94,6 +94,16 @@ pub fn ome_metadata_derive_enum(input: TokenStream) -> TokenStream {
let name = input.ident; let name = input.ident;
let expanded = quote! { let expanded = quote! {
impl<'a, 'py> ::pyo3::FromPyObject<'a, 'py> for #name {
type Error = ::pyo3::pyclass::PyClassGuardError<'a, 'py>;
fn extract(
obj: ::pyo3::Borrowed<'a, 'py, ::pyo3::PyAny>,
) -> ::std::result::Result<Self, Self::Error> {
Ok(*obj.extract::<::pyo3::PyClassGuard<'a, #name>>()?)
}
}
impl PyDisplay for #name { impl PyDisplay for #name {
fn py_str(&self) -> String { fn py_str(&self) -> String {
format!("{}", self) format!("{}", self)
@@ -147,6 +157,16 @@ pub fn ome_metadata_derive_unit(input: TokenStream) -> TokenStream {
let name = input.ident; let name = input.ident;
let expanded = quote! { let expanded = quote! {
impl<'a, 'py> ::pyo3::FromPyObject<'a, 'py> for #name {
type Error = ::pyo3::pyclass::PyClassGuardError<'a, 'py>;
fn extract(
obj: ::pyo3::Borrowed<'a, 'py, ::pyo3::PyAny>,
) -> ::std::result::Result<Self, Self::Error> {
Ok(*obj.extract::<::pyo3::PyClassGuard<'a, #name>>()?)
}
}
impl PyDisplay for #name { impl PyDisplay for #name {
fn py_str(&self) -> String { fn py_str(&self) -> String {
format!("{}", self) format!("{}", self)
+10 -10
View File
@@ -1,17 +1,17 @@
[package] [package]
name = "ome-metadata" name = "ome-metadata"
version = "0.6.0" version.workspace = true
edition = "2024" edition.workspace = true
rust-version = "1.88.0" rust-version.workspace = true
authors = ["Wim Pomp <w.pomp@nki.nl>"] authors.workspace = true
license = "MIT OR Apache-2.0" license.workspace = true
description = "Ome metadata as a rust/python structure." description.workspace = true
homepage = "https://git.pomppervova.nl/wim/ome-metadata" homepage.workspace = true
repository = "https://git.pomppervova.nl/wim/ome-metadata" repository.workspace = true
keywords.workspace = true
categories.workspace = true
documentation = "https://docs.rs/ome-metadata" documentation = "https://docs.rs/ome-metadata"
readme = "README.md" readme = "README.md"
keywords = ["bioformats", "imread", "ome", "metadata"]
categories = ["multimedia::images", "science"]
exclude = ["/tests"] exclude = ["/tests"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+32 -32
View File
@@ -188,7 +188,7 @@ impl Default for Arc {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ArcType { pub enum ArcType {
@@ -249,7 +249,7 @@ impl BinData {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum BinDataCompressionType { pub enum BinDataCompressionType {
@@ -318,7 +318,7 @@ pub enum BinaryFileContent {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum BinningType { pub enum BinningType {
@@ -555,7 +555,7 @@ impl Default for Channel {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ChannelAcquisitionModeType { pub enum ChannelAcquisitionModeType {
@@ -626,7 +626,7 @@ pub enum ChannelAcquisitionModeType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ChannelContrastMethodType { pub enum ChannelContrastMethodType {
@@ -669,7 +669,7 @@ pub enum ChannelContrastMethodType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ChannelIlluminationType { pub enum ChannelIlluminationType {
@@ -950,7 +950,7 @@ impl Default for DetectorSettings {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum DetectorType { pub enum DetectorType {
@@ -1252,7 +1252,7 @@ pub struct Experiment {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ExperimentItemType { pub enum ExperimentItemType {
@@ -1500,7 +1500,7 @@ impl Default for Filament {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum FilamentType { pub enum FilamentType {
@@ -1686,7 +1686,7 @@ pub struct FilterSet {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum FilterType { pub enum FilterType {
@@ -1764,7 +1764,7 @@ pub struct Folder {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum FontFamilyType { pub enum FontFamilyType {
@@ -2317,7 +2317,7 @@ impl Default for Laser {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum LaserLaserMediumType { pub enum LaserLaserMediumType {
@@ -2410,7 +2410,7 @@ pub enum LaserLaserMediumType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum LaserPulseType { pub enum LaserPulseType {
@@ -2447,7 +2447,7 @@ pub enum LaserPulseType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum LaserType { pub enum LaserType {
@@ -3003,7 +3003,7 @@ pub struct MapM {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum MarkerType { pub enum MarkerType {
@@ -3171,7 +3171,7 @@ pub struct MicrobeamManipulation {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum MicrobeamManipulationItemType { pub enum MicrobeamManipulationItemType {
@@ -3256,7 +3256,7 @@ pub struct Microscope {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum MicroscopeType { pub enum MicroscopeType {
@@ -3291,7 +3291,7 @@ pub enum MicroscopeType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum NamingConventionType { pub enum NamingConventionType {
@@ -3522,7 +3522,7 @@ impl Default for Objective {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ObjectiveCorrectionType { pub enum ObjectiveCorrectionType {
@@ -3577,7 +3577,7 @@ pub enum ObjectiveCorrectionType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ObjectiveImmersionType { pub enum ObjectiveImmersionType {
@@ -3647,7 +3647,7 @@ pub struct ObjectiveSettings {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ObjectiveSettingsMediumType { pub enum ObjectiveSettingsMediumType {
@@ -3701,7 +3701,7 @@ pub struct OmeBinaryOnly {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum PixelType { pub enum PixelType {
@@ -3865,7 +3865,7 @@ impl Pixels {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum PixelsDimensionOrderType { pub enum PixelsDimensionOrderType {
@@ -4892,7 +4892,7 @@ impl Default for ShapeType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ShapeFillRuleType { pub enum ShapeFillRuleType {
@@ -4921,7 +4921,7 @@ pub enum ShapeFillRuleType {
#[strum(ascii_case_insensitive)] #[strum(ascii_case_insensitive)]
#[cfg_attr( #[cfg_attr(
feature = "python", feature = "python",
pyclass(module = "ome_metadata", from_py_object, get_all, set_all, eq), pyclass(module = "ome_metadata", skip_from_py_object, get_all, set_all, eq),
derive(PyOmeEnum) derive(PyOmeEnum)
)] )]
pub enum ShapeFontStyleType { pub enum ShapeFontStyleType {
@@ -5238,7 +5238,7 @@ impl Default for TransmittanceRange {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,
@@ -5293,7 +5293,7 @@ pub enum UnitsElectricPotential {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,
@@ -5348,7 +5348,7 @@ pub enum UnitsFrequency {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,
@@ -5429,7 +5429,7 @@ pub enum UnitsLength {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,
@@ -5484,7 +5484,7 @@ pub enum UnitsPower {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,
@@ -5551,7 +5551,7 @@ pub enum UnitsPressure {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,
@@ -5592,7 +5592,7 @@ pub enum UnitsTemperature {
feature = "python", feature = "python",
pyclass( pyclass(
module = "ome_metadata", module = "ome_metadata",
from_py_object, skip_from_py_object,
get_all, get_all,
set_all, set_all,
eq, eq,