ttf_name_decoder/
macros.rs

1#[macro_export]
2macro_rules! generate_decoder {
3    ($name:ident, $encoding:expr) => {
4        pub fn $name(data: &[u8]) -> Option<String> {
5            Some($encoding.decode(data).0.into_owned())
6        }
7    };
8}
9
10pub use generate_decoder;
11
12#[macro_export]
13macro_rules! generate_id_table {
14    ( $enum:ident, $err:expr, { $( $name:ident : $id:expr ,)+ } ) => {
15        #[derive(Debug, PartialEq, Clone, Copy)]
16        pub enum $enum {
17            $($name,)*
18        }
19
20        impl std::convert::TryFrom<u16> for $enum {
21            type Error = $crate::Error;
22            fn try_from(id: u16) -> $crate::Result<Self> {
23                match id {
24                    $( $id => Ok($enum::$name) ,)*
25                    _ => Err($err),
26                }
27            }
28        }
29        impl std::convert::Into<u16> for $enum {
30            fn into(self) -> u16 {
31                match self {
32                    $( $enum::$name => $id ,)*
33                }
34            }
35        }
36    };
37}
38
39pub use generate_id_table;