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