support resource limits
This commit is contained in:
@ -37,6 +37,23 @@ wand_common!(
|
|||||||
MagickGetException
|
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.
|
/// MagickWand is a Rustic wrapper to the Rust bindings to ImageMagick.
|
||||||
///
|
///
|
||||||
/// Instantiating a `MagickWand` will construct an ImageMagick "wand"
|
/// 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> {
|
pub fn set_option(&mut self, key: &str, value: &str) -> Result<(), &'static str> {
|
||||||
let c_key = CString::new(key).unwrap();
|
let c_key = CString::new(key).unwrap();
|
||||||
let c_value = CString::new(value).unwrap();
|
let c_value = CString::new(value).unwrap();
|
||||||
|
|||||||
@ -20,5 +20,5 @@ mod magick;
|
|||||||
mod pixel;
|
mod pixel;
|
||||||
|
|
||||||
pub use self::drawing::DrawingWand;
|
pub use self::drawing::DrawingWand;
|
||||||
pub use self::magick::MagickWand;
|
pub use self::magick::{MagickWand, ResourceType};
|
||||||
pub use self::pixel::{PixelWand, HSL};
|
pub use self::pixel::{PixelWand, HSL};
|
||||||
|
|||||||
12
tests/lib.rs
12
tests/lib.rs
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
extern crate magick_rust;
|
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 magick_rust::ToMagick;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
@ -361,3 +361,13 @@ fn test_negate_image() {
|
|||||||
pixel_color.get_color_as_string().unwrap()
|
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());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user