#![allow(dead_code)]
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use libc::size_t;
use std::ffi::{CStr, CString};
use std::slice::from_raw_parts;
pub use crate::result::MagickError;
use crate::result::Result;
pub use crate::types::*;
pub use crate::wand::*;
mod conversions;
mod result;
mod types;
mod wand;
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
pub fn magick_wand_genesis() {
unsafe {
if bindings::IsMagickWandInstantiated() == bindings::MagickBooleanType::MagickFalse {
bindings::MagickWandGenesis()
}
}
}
pub fn magick_wand_terminus() {
unsafe {
if bindings::IsMagickWandInstantiated() == bindings::MagickBooleanType::MagickTrue {
bindings::MagickWandTerminus();
}
}
}
pub fn magick_query_fonts(pattern: &str) -> Result<Vec<String>> {
let mut number_fonts: size_t = 0;
let c_string = CString::new(pattern).map_err(|_| "could not convert to cstring")?;
let ptr =
unsafe { bindings::MagickQueryFonts(c_string.as_ptr(), &mut number_fonts as *mut size_t) };
if ptr.is_null() {
Err(MagickError(
"null ptr returned by magick_query_fonts".to_string(),
))
} else {
let mut v = Vec::new();
let c_str_ptr_slice = unsafe { from_raw_parts(ptr, number_fonts as usize) };
for c_str_ptr in c_str_ptr_slice {
let c_str = unsafe { CStr::from_ptr(*c_str_ptr) };
v.push(c_str.to_string_lossy().into_owned())
}
Ok(v)
}
}