1pub use paste;
4
5#[cfg(feature = "value_enum")]
6pub use value_enum;
7
8#[macro_export]
26macro_rules! alt_enum {
27 (
28 $(#[$attr:meta])*
29 $vis:vis $($name:ident $(-)?)+:
30 $($($variant:ident $(-)?)+),*
31 $(,)?
32 ) => {
33 $crate::paste::paste! {
34 $(#[$attr])*
35 $vis enum [<$($name:camel) +>] {
36 $([<$($variant:camel) +>]),*
37 }
38 }
39 };
40}
41
42#[macro_export]
62#[cfg(feature = "value_enum")]
63macro_rules! alt_val_enum {
64 (
65 $(#[$attr:meta])*
66 $vis:vis $($name:ident $(-)?)+ -> $type:ty:
67 $($($variant:ident $(-)?)+: $value:literal),*
68 $(,)?
69 ) => {
70 $crate::paste::paste! { $crate::value_enum::value_enum! {
71 $(#[$attr])*
72 $vis enum [<$($name:camel)+>]: $type {
73 $([<$($variant:camel)+>] = $value),*
74 }
75 }}
76 };
77}
78
79#[cfg(test)]
80mod tests {
81 use super::*;
82
83 alt_enum!(
84 #[derive(Debug)]
85 test enm:
86 test nya,
87 second-variant,
88 );
89
90 #[test]
91 fn test() {
92 assert_eq!(format!("{:?}", TestEnm::TestNya), "TestNya");
93 assert_eq!(format!("{:?}", TestEnm::SecondVariant), "SecondVariant");
94 }
95}
96
97#[cfg(test)]
98#[cfg(feature = "value_enum")]
99mod val_tests {
100 use super::*;
101
102 alt_val_enum!(
103 #[derive(Debug)]
104 test enm -> &'static str:
105 test nya: "nya",
106 second-variant: "second",
107 );
108
109 #[test]
110 fn test_val() {
111 assert_eq!(<&str>::from(TestEnm::TestNya), "nya");
112 assert_eq!(<&str>::from(TestEnm::SecondVariant), "second");
113 }
114}