1
1
use std:: collections:: { hash_set, HashSet } ;
2
2
use std:: fmt;
3
3
use std:: path:: { Path , PathBuf } ;
4
+ use std:: str:: FromStr ;
4
5
5
6
use rustfmt_config_proc_macro:: config_type;
6
7
use serde:: de:: { SeqAccess , Visitor } ;
@@ -118,7 +119,7 @@ pub enum GroupImportsTactic {
118
119
StdExternalCrate ,
119
120
}
120
121
121
- #[ config_type ]
122
+ #[ derive ( Debug , Copy , Clone , Eq , PartialEq , Serialize ) ]
122
123
/// How to merge imports.
123
124
pub enum MergeImports {
124
125
/// Do not merge imports.
@@ -129,6 +130,50 @@ pub enum MergeImports {
129
130
Module ,
130
131
}
131
132
133
+ impl FromStr for MergeImports {
134
+ type Err = & ' static str ;
135
+
136
+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
137
+ if "false" . eq_ignore_ascii_case ( s) {
138
+ eprintln ! ( "Warning: merge_imports=false is being renamed to Never" ) ;
139
+ return Ok ( MergeImports :: Never ) ;
140
+ }
141
+ if "true" . eq_ignore_ascii_case ( s) {
142
+ eprintln ! ( "Warning: merge_imports=true is being renamed to Crate" ) ;
143
+ return Ok ( MergeImports :: Crate ) ;
144
+ }
145
+ if "Never" . eq_ignore_ascii_case ( s) {
146
+ return Ok ( MergeImports :: Never ) ;
147
+ }
148
+ if "Crate" . eq_ignore_ascii_case ( s) {
149
+ return Ok ( MergeImports :: Crate ) ;
150
+ }
151
+ if "Module" . eq_ignore_ascii_case ( s) {
152
+ return Ok ( MergeImports :: Module ) ;
153
+ }
154
+ return Err ( "Bad variant, expected one of: `Never` `Crate` `Module`" ) ;
155
+ }
156
+ }
157
+
158
+ impl fmt:: Display for MergeImports {
159
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
160
+ write ! ( f, "{:?}" , self )
161
+ }
162
+ }
163
+
164
+ impl < ' de > Deserialize < ' de > for MergeImports {
165
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
166
+ where
167
+ D : Deserializer < ' de > ,
168
+ {
169
+ let s = String :: deserialize ( deserializer) ?;
170
+ Self :: from_str ( & s) . map_err ( |_| {
171
+ static ALLOWED : & ' static [ & str ] = & [ "Never" , "Crate" , "Module" ] ;
172
+ serde:: de:: Error :: unknown_variant ( & s, ALLOWED )
173
+ } )
174
+ }
175
+ }
176
+
132
177
#[ config_type]
133
178
pub enum ReportTactic {
134
179
Always ,
@@ -328,7 +373,7 @@ impl IgnoreList {
328
373
}
329
374
}
330
375
331
- impl std :: str :: FromStr for IgnoreList {
376
+ impl FromStr for IgnoreList {
332
377
type Err = & ' static str ;
333
378
334
379
fn from_str ( _: & str ) -> Result < Self , Self :: Err > {
0 commit comments