evdev_rs/
macros.rs

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}