diff options
Diffstat (limited to 'src/gegl.rs')
-rw-r--r-- | src/gegl.rs | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/gegl.rs b/src/gegl.rs index b03fca1..0ffdf9c 100644 --- a/src/gegl.rs +++ b/src/gegl.rs @@ -3,6 +3,7 @@ extern crate libc; use gegl_ffi as ffi; use std::ptr; use std::ffi::CString; +use std::ffi::CStr; pub struct GeglContext { _private: () @@ -46,15 +47,36 @@ impl Drop for GeglNode { } } +pub fn list_operations() -> Vec<String> { + let mut num_operations: usize = 0; + let mut result = vec!(); + unsafe { + let operations = + ffi::gegl_list_operations(&mut num_operations as *mut _); + for i in 0..(num_operations as isize) { + result.push(CStr::from_ptr(*operations.offset(i)) + .to_string_lossy().to_string()); + } + ffi::g_free(operations as *mut libc::c_void); + } + result +} + #[cfg(test)] mod tests { use super::*; use gegl_ffi as ffi; #[test] - fn can_create_nodes() { + fn implements_all_operations() { let context = GeglContext::new(); - let node = context.new_node(); - let node2 = context.new_node(); + assert_eq!(Vec::<String>::new(), list_operations()); } + + // #[test] + // fn can_create_nodes() { + // let context = GeglContext::new(); + // context.new_node(); + // context.new_node(); + // } } |