@@ -123,13 +123,36 @@ fn impl_doc_hint(ident: &syn::Ident, variants: &Variants) -> TokenStream {
123
123
}
124
124
125
125
fn impl_display ( ident : & syn:: Ident , variants : & Variants ) -> TokenStream {
126
- let vs = variants
127
- . iter ( )
128
- . filter ( |v| is_unit ( v) )
129
- . map ( |v| ( config_value_of_variant ( v) , & v. ident ) ) ;
130
- let match_patterns = fold_quote ( vs, |( s, v) | {
131
- quote ! {
132
- #ident:: #v => write!( f, "{}" , #s) ,
126
+ let match_patterns = fold_quote ( variants, |v| {
127
+ let variant = & v. ident ;
128
+ match & v. fields {
129
+ syn:: Fields :: Unit => {
130
+ let s = config_value_of_variant ( v) ;
131
+ quote ! {
132
+ #ident:: #variant => write!( f, "{}" , #s) ,
133
+ }
134
+ }
135
+ syn:: Fields :: Named ( x) if x. named . len ( ) == 1 => {
136
+ let x = & x. named [ 0 ] ;
137
+ quote ! {
138
+ #ident:: #variant { #x } => write!( f, "{}" , #x) ,
139
+ }
140
+ }
141
+ syn:: Fields :: Named ( x) => unimplemented ! (
142
+ "cannot implement display for variant with {} named fileds" ,
143
+ x. named. len( )
144
+ ) ,
145
+ syn:: Fields :: Unnamed ( x) if x. unnamed . len ( ) == 1 => {
146
+ quote ! {
147
+ #ident:: #variant( x) => write!( f, "{}" , x) ,
148
+ }
149
+ }
150
+ syn:: Fields :: Unnamed ( x) => {
151
+ unimplemented ! (
152
+ "cannot implement display for variant with {} named fileds" ,
153
+ x. unnamed. len( )
154
+ )
155
+ }
133
156
}
134
157
} ) ;
135
158
quote ! {
0 commit comments