graphviz_rust_bla/attributes/
generate.rs1#[macro_export]
2macro_rules! as_item { ($i:item) => {$i} }
3
4#[macro_export]
5macro_rules! generate_attr {
6 (enum $name:tt ; $($values:tt),+) =>{
7 as_item! {
8 #[derive(Debug,PartialEq, IntoAttribute)]
9 pub enum $name { $($values),+ }
10 }
11 impl Display for $name {
12 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
13 f.write_str(format!("{:?}",self).as_str())
14 }
15 }
16 };
17 (enum $name:tt for $($owners:tt),+; $($values:tt),+) =>{
18 as_item! {
19 #[derive(Debug,PartialEq, IntoAttribute)]
20 pub enum $name { $($values),+ }
21 }
22
23 $(impl $owners {
24 pub fn $name(elem:$name) -> Attribute {
25 elem.into_attr()
26 }
27 }
28 )+
29
30 };
31 (enum $name:tt for $($owners:tt),+; $($values:tt),+;$default:tt ) =>{
32 as_item! {
33 #[derive(Debug,PartialEq, IntoAttribute)]
34 pub enum $name { $($values),+ }
35 }
36
37 impl Default for $name{
38 fn default() -> Self { $name::$default }
39 }
40
41 $(impl $owners{
42 pub fn $name(elem:$name) -> Attribute {
43 elem.into_attr()
44 }
45 }
46 )+
47
48
49 };
50 (struct $name:tt for $($owners:tt),+; $ty:tt) =>{
51 as_item! {
52 #[derive(Debug,PartialEq, IntoAttribute)]
53 pub struct $name ($ty);
54 }
55 $(impl $owners {
56 pub fn $name(elem:$ty) -> Attribute {
57 $name(elem).into_attr()
58 }
59 }
60 )+
61
62 };
63 (struct $name:tt for $($owners:tt),+; $ty:tt; $default:expr) =>{
64 as_item! {
65 #[derive(Debug,PartialEq, IntoAttribute)]
66 pub struct $name ($ty);
67 }
68 impl Default for $name{
69 fn default() -> Self { $name($default) }
70 }
71 $(
72 impl $owners{
73 pub fn $name(elem:$ty) -> Attribute {
74 $name(elem).into_attr()
75 }
76 }
77 )+
78
79 };
80}