diff --git a/src/types/endian_type.rs b/src/types/endian_type.rs new file mode 100644 index 0000000..406bb3a --- /dev/null +++ b/src/types/endian_type.rs @@ -0,0 +1,38 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum EndianType { + Undefined = bindings::EndianType_UndefinedEndian, + LSB = bindings::EndianType_LSBEndian, + MSB = bindings::EndianType_MSBEndian, +} + +impl Default for EndianType { + fn default() -> Self { + return EndianType::Undefined; + } +} + +impl From for bindings::EndianType { + fn from(value: EndianType) -> Self { + return value as bindings::EndianType; + } +} + +impl From for EndianType { + fn from(value: bindings::EndianType) -> Self { + /* + * SAFETY: + * + * `EndianType` has the same repr as `bindings::EndianType` - u32 + * + * If `value` is less than MSB than it is in the vaild range and can be safely + * reinterpreted as `EndianType` + */ + if value <= bindings::EndianType_MSBEndian { + return unsafe { std::mem::transmute(value) }; + } + return EndianType::default(); + } +} diff --git a/src/types/mod.rs b/src/types/mod.rs index d4792d5..9b68edb 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -4,6 +4,7 @@ mod composite_operator; mod compression_type; mod dispose_type; mod dither_method; +mod endian_type; mod filter_type; mod gravity_type; mod interlace_type; @@ -17,6 +18,7 @@ pub use self::composite_operator::CompositeOperator; pub use self::compression_type::CompressionType; pub use self::dispose_type::DisposeType; pub use self::dither_method::DitherMethod; +pub use self::endian_type::EndianType; pub use self::filter_type::FilterType; pub use self::gravity_type::GravityType; pub use self::interlace_type::InterlaceType; diff --git a/src/wand/magick.rs b/src/wand/magick.rs index beacb03..d5f8a94 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -37,6 +37,7 @@ use crate::{ CompressionType, DisposeType, DitherMethod, + EndianType, FilterType, GravityType, InterlaceType, @@ -1184,7 +1185,7 @@ impl MagickWand { get_image_delay, set_image_delay, MagickGetImageDelay, MagickSetImageDelay, usize get_image_depth, set_image_depth, MagickGetImageDepth, MagickSetImageDepth, usize get_image_dispose, set_image_dispose, MagickGetImageDispose, MagickSetImageDispose, DisposeType - get_image_endian, set_image_endian, MagickGetImageEndian, MagickSetImageEndian, bindings::EndianType + get_image_endian, set_image_endian, MagickGetImageEndian, MagickSetImageEndian, EndianType 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