1#![doc = include_str!("../README.md")]
2#![cfg_attr(not(feature = "std"), no_std)]
3
4pub use enum_display_macro::*;
5
6#[cfg(test)]
7mod tests {
8 use super::*;
9
10 #[cfg(feature = "std")]
11 use std::string::{String, ToString};
12
13 #[cfg(not(feature = "std"))]
14 extern crate alloc;
15
16 #[cfg(not(feature = "std"))]
17 use alloc::string::{String, ToString};
18
19 #[allow(dead_code)]
20 #[derive(EnumDisplay)]
21 enum TestEnum {
22 Name,
23
24 #[display("Overridden Name")]
25 OverriddenName,
26
27 #[display("Unit: {variant}")]
28 NameFullFormat,
29
30 Address {
31 street: String,
32 city: String,
33 state: String,
34 zip: String,
35 },
36
37 #[display("Named: {variant} {{{street}, {zip}}}")]
38 AddressPartialFormat {
39 street: String,
40 city: String,
41 state: String,
42 zip: String,
43 },
44
45 #[display("Named: {variant} {{{street}, {city}, {state}, {zip}}}")]
46 AddressFullFormat {
47 street: String,
48 city: String,
49 state: String,
50 zip: String,
51 },
52
53 DateOfBirth(u32, u32, u32),
54
55 #[display("Unnamed: {variant}({2})")]
56 DateOfBirthPartialFormat(u32, u32, u32),
57
58 #[display("Unnamed: {variant}({0}, {1}, {2})")]
59 DateOfBirthFullFormat(u32, u32, u32),
60 }
61
62 #[allow(dead_code)]
63 #[derive(EnumDisplay)]
64 #[enum_display(case = "Kebab")]
65 enum TestEnumWithAttribute {
66 Name,
67 Address {
68 street: String,
69 city: String,
70 state: String,
71 zip: String,
72 },
73 DateOfBirth(u32, u32, u32),
74 }
75
76 #[allow(dead_code)]
77 #[derive(EnumDisplay)]
78 enum TestEnumWithLifetimeAndGenerics<'a, T: Clone>
79 where
80 T: core::fmt::Display,
81 {
82 Name,
83 Address {
84 street: &'a T,
85 city: &'a T,
86 state: &'a T,
87 zip: &'a T,
88 },
89 DateOfBirth(u32, u32, u32),
90 }
91
92 #[test]
93 fn test_unit_field_variant() {
94 assert_eq!(TestEnum::Name.to_string(), "Name");
95 assert_eq!(TestEnum::OverriddenName.to_string(), "Overridden Name");
96 assert_eq!(TestEnum::NameFullFormat.to_string(), "Unit: NameFullFormat");
97 }
98
99 #[test]
100 fn test_named_fields_variant() {
101 assert_eq!(
102 TestEnum::Address {
103 street: "123 Main St".to_string(),
104 city: "Any Town".to_string(),
105 state: "CA".to_string(),
106 zip: "12345".to_string()
107 }
108 .to_string(),
109 "Address"
110 );
111 assert_eq!(
112 TestEnum::AddressPartialFormat {
113 street: "123 Main St".to_string(),
114 city: "Any Town".to_string(),
115 state: "CA".to_string(),
116 zip: "12345".to_string()
117 }
118 .to_string(),
119 "Named: AddressPartialFormat {123 Main St, 12345}"
120 );
121 assert_eq!(
122 TestEnum::AddressFullFormat {
123 street: "123 Main St".to_string(),
124 city: "Any Town".to_string(),
125 state: "CA".to_string(),
126 zip: "12345".to_string()
127 }
128 .to_string(),
129 "Named: AddressFullFormat {123 Main St, Any Town, CA, 12345}"
130 );
131 }
132
133 #[test]
134 fn test_unnamed_fields_variant() {
135 assert_eq!(TestEnum::DateOfBirth(1, 2, 1999).to_string(), "DateOfBirth");
136 assert_eq!(
137 TestEnum::DateOfBirthPartialFormat(1, 2, 1999).to_string(),
138 "Unnamed: DateOfBirthPartialFormat(1999)"
139 );
140 assert_eq!(
141 TestEnum::DateOfBirthFullFormat(1, 2, 1999).to_string(),
142 "Unnamed: DateOfBirthFullFormat(1, 2, 1999)"
143 );
144 }
145
146 #[test]
147 fn test_unit_field_variant_case_transform() {
148 assert_eq!(TestEnumWithAttribute::Name.to_string(), "name");
149 }
150
151 #[test]
152 fn test_named_fields_variant_case_transform() {
153 assert_eq!(
154 TestEnumWithAttribute::Address {
155 street: "123 Main St".to_string(),
156 city: "Any Town".to_string(),
157 state: "CA".to_string(),
158 zip: "12345".to_string()
159 }
160 .to_string(),
161 "address"
162 );
163 }
164
165 #[test]
166 fn test_unnamed_fields_variant_case_transform() {
167 assert_eq!(
168 TestEnumWithAttribute::DateOfBirth(1, 1, 2000).to_string(),
169 "date-of-birth"
170 );
171 }
172
173 #[test]
174 fn test_unit_field_variant_with_lifetime_and_generics() {
175 assert_eq!(
176 TestEnumWithLifetimeAndGenerics::<'_, String>::Name.to_string(),
177 "Name"
178 );
179 }
180
181 #[test]
182 fn test_named_fields_variant_with_lifetime_and_generics() {
183 assert_eq!(
184 TestEnumWithLifetimeAndGenerics::Address {
185 street: &"123 Main St".to_string(),
186 city: &"Any Town".to_string(),
187 state: &"CA".to_string(),
188 zip: &"12345".to_string()
189 }
190 .to_string(),
191 "Address"
192 );
193 }
194
195 #[test]
196 fn test_unnamed_fields_variant_with_lifetime_and_generics() {
197 assert_eq!(
198 TestEnumWithLifetimeAndGenerics::<'_, String>::DateOfBirth(1, 1, 2000).to_string(),
199 "DateOfBirth"
200 );
201 }
202}