1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
use super::defines::AfError; use super::util::{dim_t, free_host}; use libc::c_char; use std::ffi::CStr; use std::ops::{Deref, DerefMut}; use std::sync::RwLock; extern "C" { fn af_get_last_error(str: *mut *mut c_char, len: *mut dim_t); } pub type ErrorCallback = fn(AfError); pub struct Callback { cb: ErrorCallback, } impl Callback { pub fn new(callback: ErrorCallback) -> Self { Self { cb: callback } } pub fn call(&self, error_code: AfError) { (self.cb)(error_code) } } pub fn handle_error_general(error_code: AfError) { match error_code { AfError::SUCCESS => {} _ => panic!( "Error message: {}\nLast error: {}", error_code, get_last_error() ), } } lazy_static! { static ref ERROR_HANDLER_LOCK: RwLock<Callback> = RwLock::new(Callback::new(handle_error_general)); } #[allow(clippy::match_wild_err_arm)] pub fn register_error_handler(cb_value: Callback) { let mut gaurd = match ERROR_HANDLER_LOCK.write() { Ok(g) => g, Err(_) => panic!("Failed to acquire lock to register error handler"), }; *gaurd.deref_mut() = cb_value; } #[allow(non_snake_case)] #[allow(clippy::match_wild_err_arm)] pub fn HANDLE_ERROR(error_code: AfError) { let gaurd = match ERROR_HANDLER_LOCK.read() { Ok(g) => g, Err(_) => panic!("Failed to acquire lock while handling FFI return value"), }; (*gaurd.deref()).call(error_code); } pub fn get_last_error() -> String { let mut result: String = String::from("No Last Error"); let mut tmp: *mut c_char = ::std::ptr::null_mut(); let mut len: dim_t = 0; unsafe { af_get_last_error(&mut tmp, &mut len as *mut dim_t); if len > 0 { result = CStr::from_ptr(tmp).to_string_lossy().into_owned(); free_host(tmp); } } result }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4