support resource limits
This commit is contained in:
parent
9422825322
commit
a14b44974d
|
@ -37,6 +37,23 @@ wand_common!(
|
|||
MagickGetException
|
||||
);
|
||||
|
||||
/// Resource type to use with [set_resource_limit](MagickWand::set_resource_limit)
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum ResourceType {
|
||||
Undefined = bindings::ResourceType_UndefinedResource as isize,
|
||||
Area = bindings::ResourceType_AreaResource as isize,
|
||||
Disk = bindings::ResourceType_DiskResource as isize,
|
||||
File = bindings::ResourceType_FileResource as isize,
|
||||
Height = bindings::ResourceType_HeightResource as isize,
|
||||
Map = bindings::ResourceType_MapResource as isize,
|
||||
Memory = bindings::ResourceType_MemoryResource as isize,
|
||||
Thread = bindings::ResourceType_ThreadResource as isize,
|
||||
Throttle = bindings::ResourceType_ThrottleResource as isize,
|
||||
Time = bindings::ResourceType_TimeResource as isize,
|
||||
Width = bindings::ResourceType_WidthResource as isize,
|
||||
ListLength = bindings::ResourceType_ListLengthResource as isize,
|
||||
}
|
||||
|
||||
/// MagickWand is a Rustic wrapper to the Rust bindings to ImageMagick.
|
||||
///
|
||||
/// Instantiating a `MagickWand` will construct an ImageMagick "wand"
|
||||
|
@ -56,6 +73,19 @@ impl MagickWand {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn set_resource_limit(resource: ResourceType, limit: u64) -> Result<(), &'static str> {
|
||||
let result = unsafe {
|
||||
bindings::SetMagickResourceLimit(
|
||||
resource as bindings::ResourceType,
|
||||
limit as bindings::MagickSizeType,
|
||||
)
|
||||
};
|
||||
match result {
|
||||
bindings::MagickBooleanType_MagickTrue => Ok(()),
|
||||
_ => Err("failed to set resource limit"),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_option(&mut self, key: &str, value: &str) -> Result<(), &'static str> {
|
||||
let c_key = CString::new(key).unwrap();
|
||||
let c_value = CString::new(value).unwrap();
|
||||
|
|
|
@ -20,5 +20,5 @@ mod magick;
|
|||
mod pixel;
|
||||
|
||||
pub use self::drawing::DrawingWand;
|
||||
pub use self::magick::MagickWand;
|
||||
pub use self::magick::{MagickWand, ResourceType};
|
||||
pub use self::pixel::{PixelWand, HSL};
|
||||
|
|
12
tests/lib.rs
12
tests/lib.rs
|
@ -16,7 +16,7 @@
|
|||
|
||||
extern crate magick_rust;
|
||||
|
||||
use magick_rust::{bindings, magick_wand_genesis, MagickWand, PixelWand};
|
||||
use magick_rust::{bindings, magick_wand_genesis, MagickWand, PixelWand, ResourceType};
|
||||
|
||||
use magick_rust::ToMagick;
|
||||
use std::error::Error;
|
||||
|
@ -361,3 +361,13 @@ fn test_negate_image() {
|
|||
pixel_color.get_color_as_string().unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_resource_limits() {
|
||||
START.call_once(|| {
|
||||
magick_wand_genesis();
|
||||
});
|
||||
MagickWand::set_resource_limit(ResourceType::Thread, 1).unwrap();
|
||||
let wand = MagickWand::new();
|
||||
assert!(wand.read_image("tests/data/rust.png").is_ok());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue