1
+ use crate :: internals:: name:: { MultiName , Name } ;
1
2
use crate :: internals:: symbol:: * ;
2
3
use crate :: internals:: { ungroup, Ctxt } ;
3
4
use proc_macro2:: { Spacing , Span , TokenStream , TokenTree } ;
@@ -21,7 +22,7 @@ use syn::{parse_quote, token, Ident, Lifetime, Token};
21
22
22
23
pub use crate :: internals:: case:: RenameRule ;
23
24
24
- struct Attr < ' c , T > {
25
+ pub ( crate ) struct Attr < ' c , T > {
25
26
cx : & ' c Ctxt ,
26
27
name : Symbol ,
27
28
tokens : TokenStream ,
@@ -62,7 +63,7 @@ impl<'c, T> Attr<'c, T> {
62
63
}
63
64
}
64
65
65
- fn get ( self ) -> Option < T > {
66
+ pub ( crate ) fn get ( self ) -> Option < T > {
66
67
self . value
67
68
}
68
69
@@ -90,7 +91,7 @@ impl<'c> BoolAttr<'c> {
90
91
}
91
92
}
92
93
93
- struct VecAttr < ' c , T > {
94
+ pub ( crate ) struct VecAttr < ' c , T > {
94
95
cx : & ' c Ctxt ,
95
96
name : Symbol ,
96
97
first_dup_tokens : TokenStream ,
@@ -125,63 +126,13 @@ impl<'c, T> VecAttr<'c, T> {
125
126
}
126
127
}
127
128
128
- fn get ( self ) -> Vec < T > {
129
+ pub ( crate ) fn get ( self ) -> Vec < T > {
129
130
self . values
130
131
}
131
132
}
132
133
133
- pub struct Name {
134
- serialize : String ,
135
- serialize_renamed : bool ,
136
- deserialize : String ,
137
- deserialize_renamed : bool ,
138
- deserialize_aliases : BTreeSet < String > ,
139
- }
140
-
141
- fn unraw ( ident : & Ident ) -> String {
142
- ident. to_string ( ) . trim_start_matches ( "r#" ) . to_owned ( )
143
- }
144
-
145
- impl Name {
146
- fn from_attrs (
147
- source_name : String ,
148
- ser_name : Attr < String > ,
149
- de_name : Attr < String > ,
150
- de_aliases : Option < VecAttr < String > > ,
151
- ) -> Name {
152
- let mut alias_set = BTreeSet :: new ( ) ;
153
- if let Some ( de_aliases) = de_aliases {
154
- for alias_name in de_aliases. get ( ) {
155
- alias_set. insert ( alias_name) ;
156
- }
157
- }
158
-
159
- let ser_name = ser_name. get ( ) ;
160
- let ser_renamed = ser_name. is_some ( ) ;
161
- let de_name = de_name. get ( ) ;
162
- let de_renamed = de_name. is_some ( ) ;
163
- Name {
164
- serialize : ser_name. unwrap_or_else ( || source_name. clone ( ) ) ,
165
- serialize_renamed : ser_renamed,
166
- deserialize : de_name. unwrap_or ( source_name) ,
167
- deserialize_renamed : de_renamed,
168
- deserialize_aliases : alias_set,
169
- }
170
- }
171
-
172
- /// Return the container name for the container when serializing.
173
- pub fn serialize_name ( & self ) -> & str {
174
- & self . serialize
175
- }
176
-
177
- /// Return the container name for the container when deserializing.
178
- pub fn deserialize_name ( & self ) -> & str {
179
- & self . deserialize
180
- }
181
-
182
- fn deserialize_aliases ( & self ) -> & BTreeSet < String > {
183
- & self . deserialize_aliases
184
- }
134
+ fn unraw ( ident : & Ident ) -> Ident {
135
+ Ident :: new ( ident. to_string ( ) . trim_start_matches ( "r#" ) , ident. span ( ) )
185
136
}
186
137
187
138
#[ derive( Copy , Clone ) ]
@@ -203,7 +154,7 @@ impl RenameAllRules {
203
154
204
155
/// Represents struct or enum attribute information.
205
156
pub struct Container {
206
- name : Name ,
157
+ name : MultiName ,
207
158
transparent : bool ,
208
159
deny_unknown_fields : bool ,
209
160
default : Default ,
@@ -327,8 +278,8 @@ impl Container {
327
278
// #[serde(rename = "foo")]
328
279
// #[serde(rename(serialize = "foo", deserialize = "bar"))]
329
280
let ( ser, de) = get_renames ( cx, RENAME , & meta) ?;
330
- ser_name. set_opt ( & meta. path , ser. as_ref ( ) . map ( syn :: LitStr :: value ) ) ;
331
- de_name. set_opt ( & meta. path , de. as_ref ( ) . map ( syn :: LitStr :: value ) ) ;
281
+ ser_name. set_opt ( & meta. path , ser. as_ref ( ) . map ( Name :: from ) ) ;
282
+ de_name. set_opt ( & meta. path , de. as_ref ( ) . map ( Name :: from ) ) ;
332
283
} else if meta. path == RENAME_ALL {
333
284
// #[serde(rename_all = "foo")]
334
285
// #[serde(rename_all(serialize = "foo", deserialize = "bar"))]
@@ -567,7 +518,7 @@ impl Container {
567
518
}
568
519
569
520
Container {
570
- name : Name :: from_attrs ( unraw ( & item. ident ) , ser_name, de_name, None ) ,
521
+ name : MultiName :: from_attrs ( Name :: from ( & unraw ( & item. ident ) ) , ser_name, de_name, None ) ,
571
522
transparent : transparent. get ( ) ,
572
523
deny_unknown_fields : deny_unknown_fields. get ( ) ,
573
524
default : default. get ( ) . unwrap_or ( Default :: None ) ,
@@ -594,7 +545,7 @@ impl Container {
594
545
}
595
546
}
596
547
597
- pub fn name ( & self ) -> & Name {
548
+ pub fn name ( & self ) -> & MultiName {
598
549
& self . name
599
550
}
600
551
@@ -781,7 +732,7 @@ fn decide_identifier(
781
732
782
733
/// Represents variant attribute information
783
734
pub struct Variant {
784
- name : Name ,
735
+ name : MultiName ,
785
736
rename_all_rules : RenameAllRules ,
786
737
ser_bound : Option < Vec < syn:: WherePredicate > > ,
787
738
de_bound : Option < Vec < syn:: WherePredicate > > ,
@@ -832,15 +783,15 @@ impl Variant {
832
783
// #[serde(rename = "foo")]
833
784
// #[serde(rename(serialize = "foo", deserialize = "bar"))]
834
785
let ( ser, de) = get_multiple_renames ( cx, & meta) ?;
835
- ser_name. set_opt ( & meta. path , ser. as_ref ( ) . map ( syn :: LitStr :: value ) ) ;
786
+ ser_name. set_opt ( & meta. path , ser. as_ref ( ) . map ( Name :: from ) ) ;
836
787
for de_value in de {
837
- de_name. set_if_none ( de_value . value ( ) ) ;
838
- de_aliases. insert ( & meta. path , de_value . value ( ) ) ;
788
+ de_name. set_if_none ( Name :: from ( & de_value ) ) ;
789
+ de_aliases. insert ( & meta. path , Name :: from ( & de_value ) ) ;
839
790
}
840
791
} else if meta. path == ALIAS {
841
792
// #[serde(alias = "foo")]
842
793
if let Some ( s) = get_lit_str ( cx, ALIAS , & meta) ? {
843
- de_aliases. insert ( & meta. path , s . value ( ) ) ;
794
+ de_aliases. insert ( & meta. path , Name :: from ( & s ) ) ;
844
795
}
845
796
} else if meta. path == RENAME_ALL {
846
797
// #[serde(rename_all = "foo")]
@@ -947,7 +898,12 @@ impl Variant {
947
898
}
948
899
949
900
Variant {
950
- name : Name :: from_attrs ( unraw ( & variant. ident ) , ser_name, de_name, Some ( de_aliases) ) ,
901
+ name : MultiName :: from_attrs (
902
+ Name :: from ( & unraw ( & variant. ident ) ) ,
903
+ ser_name,
904
+ de_name,
905
+ Some ( de_aliases) ,
906
+ ) ,
951
907
rename_all_rules : RenameAllRules {
952
908
serialize : rename_all_ser_rule. get ( ) . unwrap_or ( RenameRule :: None ) ,
953
909
deserialize : rename_all_de_rule. get ( ) . unwrap_or ( RenameRule :: None ) ,
@@ -964,20 +920,23 @@ impl Variant {
964
920
}
965
921
}
966
922
967
- pub fn name ( & self ) -> & Name {
923
+ pub fn name ( & self ) -> & MultiName {
968
924
& self . name
969
925
}
970
926
971
- pub fn aliases ( & self ) -> & BTreeSet < String > {
927
+ pub fn aliases ( & self ) -> & BTreeSet < Name > {
972
928
self . name . deserialize_aliases ( )
973
929
}
974
930
975
931
pub fn rename_by_rules ( & mut self , rules : RenameAllRules ) {
976
932
if !self . name . serialize_renamed {
977
- self . name . serialize = rules. serialize . apply_to_variant ( & self . name . serialize ) ;
933
+ self . name . serialize . value =
934
+ rules. serialize . apply_to_variant ( & self . name . serialize . value ) ;
978
935
}
979
936
if !self . name . deserialize_renamed {
980
- self . name . deserialize = rules. deserialize . apply_to_variant ( & self . name . deserialize ) ;
937
+ self . name . deserialize . value = rules
938
+ . deserialize
939
+ . apply_to_variant ( & self . name . deserialize . value ) ;
981
940
}
982
941
self . name
983
942
. deserialize_aliases
@@ -1023,7 +982,7 @@ impl Variant {
1023
982
1024
983
/// Represents field attribute information
1025
984
pub struct Field {
1026
- name : Name ,
985
+ name : MultiName ,
1027
986
skip_serializing : bool ,
1028
987
skip_deserializing : bool ,
1029
988
skip_serializing_if : Option < syn:: ExprPath > ,
@@ -1082,8 +1041,11 @@ impl Field {
1082
1041
let mut flatten = BoolAttr :: none ( cx, FLATTEN ) ;
1083
1042
1084
1043
let ident = match & field. ident {
1085
- Some ( ident) => unraw ( ident) ,
1086
- None => index. to_string ( ) ,
1044
+ Some ( ident) => Name :: from ( & unraw ( ident) ) ,
1045
+ None => Name {
1046
+ value : index. to_string ( ) ,
1047
+ span : Span :: call_site ( ) ,
1048
+ } ,
1087
1049
} ;
1088
1050
1089
1051
if let Some ( borrow_attribute) = attrs. and_then ( |variant| variant. borrow . as_ref ( ) ) {
@@ -1119,15 +1081,15 @@ impl Field {
1119
1081
// #[serde(rename = "foo")]
1120
1082
// #[serde(rename(serialize = "foo", deserialize = "bar"))]
1121
1083
let ( ser, de) = get_multiple_renames ( cx, & meta) ?;
1122
- ser_name. set_opt ( & meta. path , ser. as_ref ( ) . map ( syn :: LitStr :: value ) ) ;
1084
+ ser_name. set_opt ( & meta. path , ser. as_ref ( ) . map ( Name :: from ) ) ;
1123
1085
for de_value in de {
1124
- de_name. set_if_none ( de_value . value ( ) ) ;
1125
- de_aliases. insert ( & meta. path , de_value . value ( ) ) ;
1086
+ de_name. set_if_none ( Name :: from ( & de_value ) ) ;
1087
+ de_aliases. insert ( & meta. path , Name :: from ( & de_value ) ) ;
1126
1088
}
1127
1089
} else if meta. path == ALIAS {
1128
1090
// #[serde(alias = "foo")]
1129
1091
if let Some ( s) = get_lit_str ( cx, ALIAS , & meta) ? {
1130
- de_aliases. insert ( & meta. path , s . value ( ) ) ;
1092
+ de_aliases. insert ( & meta. path , Name :: from ( & s ) ) ;
1131
1093
}
1132
1094
} else if meta. path == DEFAULT {
1133
1095
if meta. input . peek ( Token ! [ =] ) {
@@ -1290,7 +1252,7 @@ impl Field {
1290
1252
}
1291
1253
1292
1254
Field {
1293
- name : Name :: from_attrs ( ident, ser_name, de_name, Some ( de_aliases) ) ,
1255
+ name : MultiName :: from_attrs ( ident, ser_name, de_name, Some ( de_aliases) ) ,
1294
1256
skip_serializing : skip_serializing. get ( ) ,
1295
1257
skip_deserializing : skip_deserializing. get ( ) ,
1296
1258
skip_serializing_if : skip_serializing_if. get ( ) ,
@@ -1306,20 +1268,22 @@ impl Field {
1306
1268
}
1307
1269
}
1308
1270
1309
- pub fn name ( & self ) -> & Name {
1271
+ pub fn name ( & self ) -> & MultiName {
1310
1272
& self . name
1311
1273
}
1312
1274
1313
- pub fn aliases ( & self ) -> & BTreeSet < String > {
1275
+ pub fn aliases ( & self ) -> & BTreeSet < Name > {
1314
1276
self . name . deserialize_aliases ( )
1315
1277
}
1316
1278
1317
1279
pub fn rename_by_rules ( & mut self , rules : RenameAllRules ) {
1318
1280
if !self . name . serialize_renamed {
1319
- self . name . serialize = rules. serialize . apply_to_field ( & self . name . serialize ) ;
1281
+ self . name . serialize . value = rules. serialize . apply_to_field ( & self . name . serialize . value ) ;
1320
1282
}
1321
1283
if !self . name . deserialize_renamed {
1322
- self . name . deserialize = rules. deserialize . apply_to_field ( & self . name . deserialize ) ;
1284
+ self . name . deserialize . value = rules
1285
+ . deserialize
1286
+ . apply_to_field ( & self . name . deserialize . value ) ;
1323
1287
}
1324
1288
self . name
1325
1289
. deserialize_aliases
@@ -1769,7 +1733,7 @@ fn is_primitive_path(path: &syn::Path, primitive: &str) -> bool {
1769
1733
// attribute on the field so there must be at least one borrowable lifetime.
1770
1734
fn borrowable_lifetimes (
1771
1735
cx : & Ctxt ,
1772
- name : & str ,
1736
+ name : & Name ,
1773
1737
field : & syn:: Field ,
1774
1738
) -> Result < BTreeSet < syn:: Lifetime > , ( ) > {
1775
1739
let mut lifetimes = BTreeSet :: new ( ) ;
0 commit comments