1macro_rules! string_getter {
2 ( $( #[$doc:meta], $func_name:ident, $c_func: ident ),* ) => {
3 $(
4 #[$doc]
5 fn $func_name (&self) -> Option<&str> {
6 unsafe {
7 ptr_to_str(raw::$c_func(self.raw()))
8 }
9 }
10 )*
11 };
12}
13
14macro_rules! string_setter {
15 ( $( $func_name:ident, $c_func: ident ),* ) => {
16 $(
17 fn $func_name (&self, field: &str) {
18 let field = CString::new(field).unwrap();
19 unsafe {
20 raw::$c_func(self.raw(), field.as_ptr())
21 }
22 }
23 )*
24 };
25}
26
27macro_rules! product_getter {
28 ( $( $func_name:ident, $c_func: ident ),* ) => {
29 $(
30 fn $func_name (&self) -> u16 {
31 unsafe {
32 raw::$c_func(self.raw()) as u16
33 }
34 }
35 )*
36 };
37}
38
39macro_rules! product_setter {
40 ( $( $func_name:ident, $c_func: ident ),* ) => {
41 $(
42 fn $func_name (&self, field: u16) {
43 unsafe {
44 raw::$c_func(self.raw(), field as c_int);
45 }
46 }
47 )*
48 };
49}
50
51macro_rules! abs_getter {
52 ( $( $func_name:ident, $c_func: ident ),* ) => {
53 $(
54 fn $func_name (&self,
55 code: u32) -> std::io::Result<i32> {
56 let result = unsafe {
57 raw::$c_func(self.raw(), code as c_uint) as i32
58 };
59
60 match result {
61 0 => Err(std::io::Error::from_raw_os_error(0)),
62 k => Ok(k)
63 }
64 }
65 )*
66 };
67}
68
69macro_rules! abs_setter {
70 ( $( $func_name:ident, $c_func: ident ),* ) => {
71 $(
72 fn $func_name (&self,
73 code: u32,
74 val: i32) {
75 unsafe {
76 raw::$c_func(self.raw(), code as c_uint, val as c_int);
77 }
78 }
79 )*
80 };
81}