#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(improper_ctypes)]
#![allow(dead_code)]
#[macro_use]
extern crate num_derive;
extern crate num_traits;
pub mod bindings;
mod connection;
pub mod error;
mod image;
mod interpolate;
pub mod operator;
pub mod ops;
mod region;
pub mod utils;
pub mod voption;
pub use connection::*;
use error::Error;
pub use image::*;
pub use interpolate::*;
pub use region::*;
use std::ffi::CStr;
pub type Result<T> = std::result::Result<T, error::Error>;
pub struct Vips;
impl Vips {
pub fn init(name: &str) -> Result<()> {
let c_name = utils::new_c_string(name)?;
let res = unsafe { bindings::vips_init(c_name.as_ptr()) };
if res == 0 {
Ok(())
} else {
Err(Error::InitializationError("Failed to init libvips".to_string()))
}
}
pub fn leak_set(leak: bool) {
unsafe { bindings::vips_leak_set(if leak { 1 } else { 0 }) };
}
pub fn progress_set(flag: bool) {
unsafe {
bindings::vips_progress_set(if flag { 1 } else { 0 });
}
}
pub fn get_disc_threshold() -> u64 {
unsafe { bindings::vips_get_disc_threshold() }
}
pub fn version_string() -> Result<String> {
unsafe {
let version = CStr::from_ptr(bindings::vips_version_string());
let version_str = version
.to_str()
.map_err(|_| Error::InitializationError("Error initializing string".to_string()))?;
Ok(version_str.to_string())
}
}
pub fn thread_shutdown() {
unsafe {
bindings::vips_thread_shutdown();
}
}
pub fn error_buffer() -> Result<String> {
unsafe {
let buffer = CStr::from_ptr(bindings::vips_error_buffer());
let buffer_str = buffer
.to_str()
.map_err(|_| Error::InitializationError("Error initializing string".to_string()))?;
Ok(buffer_str.to_string())
}
}
pub fn error(domain: &str, error: &str) -> Result<()> {
unsafe {
let c_str_error = utils::new_c_string(error)?;
let c_str_domain = utils::new_c_string(domain)?;
bindings::vips_error(
c_str_domain.as_ptr(),
c_str_error.as_ptr(),
);
Ok(())
}
}
pub fn error_system(code: i32, domain: &str, error: &str) -> Result<()> {
unsafe {
let c_str_error = utils::new_c_string(error)?;
let c_str_domain = utils::new_c_string(domain)?;
bindings::vips_error_system(
code,
c_str_domain.as_ptr(),
c_str_error.as_ptr(),
);
Ok(())
}
}
pub fn freeze_error_buffer() {
unsafe {
bindings::vips_error_freeze();
}
}
pub fn error_clear() {
unsafe {
bindings::vips_error_clear();
}
}
pub fn error_thaw() {
unsafe {
bindings::vips_error_thaw();
}
}
pub fn error_exit(error: &str) -> Result<()> {
unsafe {
let c_str_error = utils::new_c_string(error)?;
bindings::vips_error_exit(c_str_error.as_ptr());
}
}
pub fn cache_print() {
unsafe {
bindings::vips_cache_print();
}
}
pub fn cache_set_max(max: i32) {
unsafe {
bindings::vips_cache_set_max(max);
}
}
pub fn cache_set_max_mem(max: u64) {
unsafe {
bindings::vips_cache_set_max_mem(max);
}
}
pub fn cache_set_max_files(max: i32) {
unsafe {
bindings::vips_cache_set_max_files(max);
}
}
pub fn cache_get_max() -> i32 {
unsafe { bindings::vips_cache_get_max() }
}
pub fn cache_get_max_mem() -> u64 {
unsafe { bindings::vips_cache_get_max_mem() }
}
pub fn cache_get_max_files() -> i32 {
unsafe { bindings::vips_cache_get_max_files() }
}
pub fn cache_get_size() -> i32 {
unsafe { bindings::vips_cache_get_size() }
}
pub fn cache_set_dump(flag: bool) {
unsafe {
bindings::vips_cache_set_dump(if flag { 1 } else { 0 });
}
}
pub fn cache_set_trace(flag: bool) {
unsafe {
bindings::vips_cache_set_trace(if flag { 1 } else { 0 });
}
}
pub fn concurrency_set(max: i32) {
unsafe {
bindings::vips_concurrency_set(max);
}
}
pub fn concurrency_get() -> i32 {
unsafe { bindings::vips_concurrency_get() }
}
pub fn tracked_get_mem() -> u64 {
unsafe { bindings::vips_tracked_get_mem() }
}
pub fn tracked_get_mem_highwater() -> u64 {
unsafe { bindings::vips_tracked_get_mem_highwater() }
}
pub fn tracked_get_allocs() -> i32 {
unsafe { bindings::vips_tracked_get_allocs() }
}
pub fn tracked_get_files() -> i32 {
unsafe { bindings::vips_tracked_get_files() }
}
pub fn pipe_read_limit_set(limit: i64) {
unsafe {
bindings::vips_pipe_read_limit_set(limit);
}
}
pub fn shutdown() {
unsafe {
bindings::vips_shutdown();
}
}
}