@@ -389,37 +389,6 @@ macro_rules! define_config {
389389 where
390390 D : Deserializer <' de>,
391391 {
392- #[ allow( non_camel_case_types) ]
393- enum FieldName {
394- $( $field, ) *
395- }
396- struct FieldNameVisitor ;
397- impl <' de> serde:: de:: Visitor <' de> for FieldNameVisitor {
398- type Value = FieldName ;
399- fn expecting( & self , f: & mut std:: fmt:: Formatter <' _>) -> std:: fmt:: Result {
400- f. write_str( "field identifier" )
401- }
402-
403- #[ inline]
404- fn visit_str<E >( self , value: & str ) -> Result <Self :: Value , E >
405- where
406- E : serde:: de:: Error ,
407- {
408- match value {
409- $( $field_key => Ok ( FieldName :: $field) , ) *
410- _ => Err ( serde:: de:: Error :: unknown_field( value, FIELDS ) ) ,
411- }
412- }
413- }
414- impl <' de> Deserialize <' de> for FieldName {
415- #[ inline]
416- fn deserialize<D >( deserializer: D ) -> Result <Self , D :: Error >
417- where
418- D : Deserializer <' de>,
419- {
420- Deserializer :: deserialize_identifier( deserializer, FieldNameVisitor )
421- }
422- }
423392 struct Field ;
424393 impl <' de> serde:: de:: Visitor <' de> for Field {
425394 type Value = $name;
@@ -434,15 +403,15 @@ macro_rules! define_config {
434403 {
435404 $( let mut $field: Option <$field_ty> = None ; ) *
436405 while let Some ( key) =
437- match serde:: de:: MapAccess :: next_key:: <FieldName >( & mut map) {
406+ match serde:: de:: MapAccess :: next_key:: <String >( & mut map) {
438407 Ok ( val) => val,
439408 Err ( err) => {
440409 return Err ( err) ;
441410 }
442411 }
443412 {
444- match key {
445- $( FieldName :: $field => {
413+ match & * key {
414+ $( $field_key => {
446415 if $field. is_some( ) {
447416 return Err ( <A :: Error as serde:: de:: Error >:: duplicate_field(
448417 $field_key,
@@ -457,6 +426,9 @@ macro_rules! define_config {
457426 }
458427 } ;
459428 } ) *
429+ key => {
430+ return Err ( serde:: de:: Error :: unknown_field( key, FIELDS ) ) ;
431+ }
460432 }
461433 }
462434 Ok ( $name { $( $field) ,* } )
0 commit comments