From 5a3cb8a04d02e3d9bb2aadf277ba49271c4f7fd7 Mon Sep 17 00:00:00 2001 From: 5ohue <86558263+5ohue@users.noreply.github.com> Date: Sat, 11 May 2024 14:12:31 +0300 Subject: [PATCH] Add `InterlaceType` type --- src/types/interlace_type.rs | 43 +++++++++++++++++++++++++++++++++++++ src/types/mod.rs | 2 ++ src/wand/magick.rs | 7 +++--- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 src/types/interlace_type.rs diff --git a/src/types/interlace_type.rs b/src/types/interlace_type.rs new file mode 100644 index 0000000..4ad792e --- /dev/null +++ b/src/types/interlace_type.rs @@ -0,0 +1,43 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum InterlaceType { + Undefined = bindings::InterlaceType_UndefinedInterlace, + No = bindings::InterlaceType_NoInterlace, + Line = bindings::InterlaceType_LineInterlace, + Plane = bindings::InterlaceType_PlaneInterlace, + Partition = bindings::InterlaceType_PartitionInterlace, + GIF = bindings::InterlaceType_GIFInterlace, + JPEG = bindings::InterlaceType_JPEGInterlace, + PNG = bindings::InterlaceType_PNGInterlace, +} + +impl Default for InterlaceType { + fn default() -> Self { + return InterlaceType::Undefined; + } +} + +impl From for bindings::InterlaceType { + fn from(value: InterlaceType) -> Self { + return value as bindings::InterlaceType; + } +} + +impl From for InterlaceType { + fn from(value: bindings::InterlaceType) -> Self { + /* + * SAFETY: + * + * `InterlaceType` has the same repr as `bindings::InterlaceType` - u32 + * + * If `value` is less than PNG than it is in the vaild range and can be safely + * reinterpreted as `InterlaceType` + */ + if value <= bindings::InterlaceType_PNGInterlace { + return unsafe { std::mem::transmute(value) }; + } + return InterlaceType::default(); + } +} diff --git a/src/types/mod.rs b/src/types/mod.rs index 5f01a35..d4792d5 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -6,6 +6,7 @@ mod dispose_type; mod dither_method; mod filter_type; mod gravity_type; +mod interlace_type; mod pixel_interpolate_method; mod metric_type; mod resource_type; @@ -18,6 +19,7 @@ pub use self::dispose_type::DisposeType; pub use self::dither_method::DitherMethod; pub use self::filter_type::FilterType; pub use self::gravity_type::GravityType; +pub use self::interlace_type::InterlaceType; pub use self::pixel_interpolate_method::PixelInterpolateMethod; pub use self::metric_type::MetricType; pub use self::resource_type::ResourceType; diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 5758dca..beacb03 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -39,6 +39,7 @@ use crate::{ DitherMethod, FilterType, GravityType, + InterlaceType, PixelInterpolateMethod, MetricType, ResourceType @@ -1187,7 +1188,7 @@ impl MagickWand { get_image_fuzz, set_image_fuzz, MagickGetImageFuzz, MagickSetImageFuzz, f64 get_image_gamma, set_image_gamma, MagickGetImageGamma, MagickSetImageGamma, f64 get_image_gravity, set_image_gravity, MagickGetImageGravity, MagickSetImageGravity, GravityType - get_image_interlace_scheme, set_image_interlace_scheme, MagickGetImageInterlaceScheme, MagickSetImageInterlaceScheme, bindings::InterlaceType + get_image_interlace_scheme, set_image_interlace_scheme, MagickGetImageInterlaceScheme, MagickSetImageInterlaceScheme, InterlaceType get_image_interpolate_method, set_image_interpolate_method, MagickGetImageInterpolateMethod, MagickSetImageInterpolateMethod, PixelInterpolateMethod get_image_iterations, set_image_iterations, MagickGetImageIterations, MagickSetImageIterations, usize get_image_orientation, set_image_orientation, MagickGetImageOrientation, MagickSetImageOrientation, bindings::OrientationType @@ -1195,8 +1196,8 @@ impl MagickWand { get_image_scene, set_image_scene, MagickGetImageScene, MagickSetImageScene, usize get_image_type, set_image_type, MagickGetImageType, MagickSetImageType, bindings::ImageType get_image_units, set_image_units, MagickGetImageUnits, MagickSetImageUnits, bindings::ResolutionType - get_interlace_scheme, set_interlace_scheme, MagickGetInterlaceScheme, MagickSetInterlaceScheme, bindings::InterlaceType - get_interpolate_method, set_interpolate_method, MagickGetInterpolateMethod, MagickSetInterpolateMethod, bindings::PixelInterpolateMethod + get_interlace_scheme, set_interlace_scheme, MagickGetInterlaceScheme, MagickSetInterlaceScheme, InterlaceType + get_interpolate_method, set_interpolate_method, MagickGetInterpolateMethod, MagickSetInterpolateMethod, PixelInterpolateMethod get_iterator_index, set_iterator_index, MagickGetIteratorIndex, MagickSetIteratorIndex, isize get_orientation, set_orientation, MagickGetOrientation, MagickSetOrientation, bindings::OrientationType get_pointsize, set_pointsize, MagickGetPointsize, MagickSetPointsize, f64