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
macro_rules! string_getter { ( $( $func_name:ident, $c_func: ident ),* ) => { $( pub fn $func_name (&self) -> Option<&str> { ptr_to_str(unsafe { raw::$c_func(self.raw) }) } )* }; } macro_rules! string_setter { ( $( $func_name:ident, $c_func: ident ),* ) => { $( pub fn $func_name (&self, field: &str) { let field = CString::new(field).unwrap(); unsafe { raw::$c_func(self.raw, field.as_ptr()) } } )* }; } macro_rules! product_getter { ( $( $func_name:ident, $c_func: ident ),* ) => { $( pub fn $func_name (&self) -> u16 { unsafe { raw::$c_func(self.raw) as u16 } } )* }; } macro_rules! product_setter { ( $( $func_name:ident, $c_func: ident ),* ) => { $( pub fn $func_name (&self, field: u16) { unsafe { raw::$c_func(self.raw, field as c_int); } } )* }; } macro_rules! abs_getter { ( $( $func_name:ident, $c_func: ident ),* ) => { $( pub fn $func_name (&self, code: u32) -> std::io::Result<i32> { let result = unsafe { raw::$c_func(self.raw, code as c_uint) as i32 }; match result { 0 => Err(std::io::Error::from_raw_os_error(0)), k => Ok(k) } } )* }; } macro_rules! abs_setter { ( $( $func_name:ident, $c_func: ident ),* ) => { $( pub fn $func_name (&self, code: u32, val: i32) { unsafe { raw::$c_func(self.raw, code as c_uint, val as c_int); } } )* }; }