@@ -1171,195 +1171,84 @@ type MaybeWorkspaceSemverVersion = MaybeWorkspace<semver::Version, TomlWorkspace
1171
1171
1172
1172
type MaybeWorkspaceString = MaybeWorkspace < String , TomlWorkspaceField > ;
1173
1173
impl < ' de > de:: Deserialize < ' de > for MaybeWorkspaceString {
1174
- fn deserialize < D > ( d : D ) -> Result < Self , D :: Error >
1174
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1175
1175
where
1176
1176
D : de:: Deserializer < ' de > ,
1177
1177
{
1178
- struct Visitor ;
1179
-
1180
- impl < ' de > de:: Visitor < ' de > for Visitor {
1181
- type Value = MaybeWorkspaceString ;
1182
-
1183
- fn expecting ( & self , f : & mut fmt:: Formatter < ' _ > ) -> Result < ( ) , std:: fmt:: Error > {
1184
- f. write_str ( "a string or workspace" )
1185
- }
1186
-
1187
- fn visit_string < E > ( self , value : String ) -> Result < Self :: Value , E >
1188
- where
1189
- E : de:: Error ,
1190
- {
1191
- Ok ( MaybeWorkspaceString :: Defined ( value) )
1192
- }
1193
-
1194
- fn visit_map < V > ( self , map : V ) -> Result < Self :: Value , V :: Error >
1195
- where
1196
- V : de:: MapAccess < ' de > ,
1197
- {
1198
- let mvd = de:: value:: MapAccessDeserializer :: new ( map) ;
1199
- TomlWorkspaceField :: deserialize ( mvd) . map ( MaybeWorkspace :: Workspace )
1200
- }
1201
- }
1202
-
1203
- d. deserialize_any ( Visitor )
1178
+ UntaggedEnumVisitor :: new ( )
1179
+ . expecting ( "a string or workspace" )
1180
+ . string ( |value| Ok ( MaybeWorkspace :: Defined ( value. to_owned ( ) ) ) )
1181
+ . map ( |value| value. deserialize ( ) . map ( MaybeWorkspace :: Workspace ) )
1182
+ . deserialize ( deserializer)
1204
1183
}
1205
1184
}
1206
1185
1207
1186
type MaybeWorkspacePartialVersion = MaybeWorkspace < PartialVersion , TomlWorkspaceField > ;
1208
1187
impl < ' de > de:: Deserialize < ' de > for MaybeWorkspacePartialVersion {
1209
- fn deserialize < D > ( d : D ) -> Result < Self , D :: Error >
1188
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1210
1189
where
1211
1190
D : de:: Deserializer < ' de > ,
1212
1191
{
1213
- struct Visitor ;
1214
-
1215
- impl < ' de > de:: Visitor < ' de > for Visitor {
1216
- type Value = MaybeWorkspacePartialVersion ;
1217
-
1218
- fn expecting ( & self , f : & mut fmt:: Formatter < ' _ > ) -> Result < ( ) , std:: fmt:: Error > {
1219
- f. write_str ( "a semver or workspace" )
1220
- }
1221
-
1222
- fn visit_string < E > ( self , value : String ) -> Result < Self :: Value , E >
1223
- where
1224
- E : de:: Error ,
1225
- {
1226
- let value = value. parse :: < PartialVersion > ( ) . map_err ( |e| E :: custom ( e) ) ?;
1227
- Ok ( MaybeWorkspacePartialVersion :: Defined ( value) )
1228
- }
1229
-
1230
- fn visit_map < V > ( self , map : V ) -> Result < Self :: Value , V :: Error >
1231
- where
1232
- V : de:: MapAccess < ' de > ,
1233
- {
1234
- let mvd = de:: value:: MapAccessDeserializer :: new ( map) ;
1235
- TomlWorkspaceField :: deserialize ( mvd) . map ( MaybeWorkspace :: Workspace )
1236
- }
1237
- }
1238
-
1239
- d. deserialize_any ( Visitor )
1192
+ use serde:: de:: Error as _;
1193
+ UntaggedEnumVisitor :: new ( )
1194
+ . expecting ( "a SemVer version or workspace" )
1195
+ . string ( |value| {
1196
+ let value = value
1197
+ . parse :: < PartialVersion > ( )
1198
+ . map_err ( |e| serde_untagged:: de:: Error :: custom ( e) ) ?;
1199
+ Ok ( MaybeWorkspace :: Defined ( value) )
1200
+ } )
1201
+ . map ( |value| value. deserialize ( ) . map ( MaybeWorkspace :: Workspace ) )
1202
+ . deserialize ( deserializer)
1240
1203
}
1241
1204
}
1242
1205
1243
1206
type MaybeWorkspaceVecString = MaybeWorkspace < Vec < String > , TomlWorkspaceField > ;
1244
1207
impl < ' de > de:: Deserialize < ' de > for MaybeWorkspaceVecString {
1245
- fn deserialize < D > ( d : D ) -> Result < Self , D :: Error >
1208
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1246
1209
where
1247
1210
D : de:: Deserializer < ' de > ,
1248
1211
{
1249
- struct Visitor ;
1250
-
1251
- impl < ' de > de:: Visitor < ' de > for Visitor {
1252
- type Value = MaybeWorkspaceVecString ;
1253
-
1254
- fn expecting ( & self , f : & mut fmt:: Formatter < ' _ > ) -> Result < ( ) , fmt:: Error > {
1255
- f. write_str ( "a vector of strings or workspace" )
1256
- }
1257
- fn visit_seq < A > ( self , v : A ) -> Result < Self :: Value , A :: Error >
1258
- where
1259
- A : de:: SeqAccess < ' de > ,
1260
- {
1261
- let seq = de:: value:: SeqAccessDeserializer :: new ( v) ;
1262
- Vec :: deserialize ( seq) . map ( MaybeWorkspace :: Defined )
1263
- }
1264
-
1265
- fn visit_map < V > ( self , map : V ) -> Result < Self :: Value , V :: Error >
1266
- where
1267
- V : de:: MapAccess < ' de > ,
1268
- {
1269
- let mvd = de:: value:: MapAccessDeserializer :: new ( map) ;
1270
- TomlWorkspaceField :: deserialize ( mvd) . map ( MaybeWorkspace :: Workspace )
1271
- }
1272
- }
1273
-
1274
- d. deserialize_any ( Visitor )
1212
+ UntaggedEnumVisitor :: new ( )
1213
+ . expecting ( "a vector of strings or workspace" )
1214
+ . seq ( |value| value. deserialize ( ) . map ( MaybeWorkspace :: Defined ) )
1215
+ . map ( |value| value. deserialize ( ) . map ( MaybeWorkspace :: Workspace ) )
1216
+ . deserialize ( deserializer)
1275
1217
}
1276
1218
}
1277
1219
1278
1220
type MaybeWorkspaceStringOrBool = MaybeWorkspace < StringOrBool , TomlWorkspaceField > ;
1279
1221
impl < ' de > de:: Deserialize < ' de > for MaybeWorkspaceStringOrBool {
1280
- fn deserialize < D > ( d : D ) -> Result < Self , D :: Error >
1222
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1281
1223
where
1282
1224
D : de:: Deserializer < ' de > ,
1283
1225
{
1284
- struct Visitor ;
1285
-
1286
- impl < ' de > de:: Visitor < ' de > for Visitor {
1287
- type Value = MaybeWorkspaceStringOrBool ;
1288
-
1289
- fn expecting ( & self , f : & mut fmt:: Formatter < ' _ > ) -> Result < ( ) , fmt:: Error > {
1290
- f. write_str ( "a string, a bool, or workspace" )
1291
- }
1292
-
1293
- fn visit_bool < E > ( self , v : bool ) -> Result < Self :: Value , E >
1294
- where
1295
- E : de:: Error ,
1296
- {
1297
- let b = de:: value:: BoolDeserializer :: new ( v) ;
1298
- StringOrBool :: deserialize ( b) . map ( MaybeWorkspace :: Defined )
1299
- }
1300
-
1301
- fn visit_string < E > ( self , v : String ) -> Result < Self :: Value , E >
1302
- where
1303
- E : de:: Error ,
1304
- {
1305
- let string = de:: value:: StringDeserializer :: new ( v) ;
1306
- StringOrBool :: deserialize ( string) . map ( MaybeWorkspace :: Defined )
1307
- }
1308
-
1309
- fn visit_map < V > ( self , map : V ) -> Result < Self :: Value , V :: Error >
1310
- where
1311
- V : de:: MapAccess < ' de > ,
1312
- {
1313
- let mvd = de:: value:: MapAccessDeserializer :: new ( map) ;
1314
- TomlWorkspaceField :: deserialize ( mvd) . map ( MaybeWorkspace :: Workspace )
1315
- }
1316
- }
1317
-
1318
- d. deserialize_any ( Visitor )
1226
+ UntaggedEnumVisitor :: new ( )
1227
+ . expecting ( "a string, a bool, or workspace" )
1228
+ . bool ( |b| Ok ( StringOrBool :: Bool ( b) ) . map ( MaybeWorkspace :: Defined ) )
1229
+ . string ( |s| Ok ( StringOrBool :: String ( s. to_owned ( ) ) ) . map ( MaybeWorkspace :: Defined ) )
1230
+ . map ( |value| value. deserialize ( ) . map ( MaybeWorkspace :: Workspace ) )
1231
+ . deserialize ( deserializer)
1319
1232
}
1320
1233
}
1321
1234
1322
1235
type MaybeWorkspaceVecStringOrBool = MaybeWorkspace < VecStringOrBool , TomlWorkspaceField > ;
1323
1236
impl < ' de > de:: Deserialize < ' de > for MaybeWorkspaceVecStringOrBool {
1324
- fn deserialize < D > ( d : D ) -> Result < Self , D :: Error >
1237
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1325
1238
where
1326
1239
D : de:: Deserializer < ' de > ,
1327
1240
{
1328
- struct Visitor ;
1329
-
1330
- impl < ' de > de:: Visitor < ' de > for Visitor {
1331
- type Value = MaybeWorkspaceVecStringOrBool ;
1332
-
1333
- fn expecting ( & self , f : & mut fmt:: Formatter < ' _ > ) -> Result < ( ) , fmt:: Error > {
1334
- f. write_str ( "a boolean, a vector of strings, or workspace" )
1335
- }
1336
-
1337
- fn visit_bool < E > ( self , v : bool ) -> Result < Self :: Value , E >
1338
- where
1339
- E : de:: Error ,
1340
- {
1341
- let b = de:: value:: BoolDeserializer :: new ( v) ;
1342
- VecStringOrBool :: deserialize ( b) . map ( MaybeWorkspace :: Defined )
1343
- }
1344
-
1345
- fn visit_seq < A > ( self , v : A ) -> Result < Self :: Value , A :: Error >
1346
- where
1347
- A : de:: SeqAccess < ' de > ,
1348
- {
1349
- let seq = de:: value:: SeqAccessDeserializer :: new ( v) ;
1350
- VecStringOrBool :: deserialize ( seq) . map ( MaybeWorkspace :: Defined )
1351
- }
1352
-
1353
- fn visit_map < V > ( self , map : V ) -> Result < Self :: Value , V :: Error >
1354
- where
1355
- V : de:: MapAccess < ' de > ,
1356
- {
1357
- let mvd = de:: value:: MapAccessDeserializer :: new ( map) ;
1358
- TomlWorkspaceField :: deserialize ( mvd) . map ( MaybeWorkspace :: Workspace )
1359
- }
1360
- }
1361
-
1362
- d. deserialize_any ( Visitor )
1241
+ UntaggedEnumVisitor :: new ( )
1242
+ . expecting ( "a boolean, a vector of strings, or workspace" )
1243
+ . bool ( |value| Ok ( VecStringOrBool :: Bool ( value) ) . map ( MaybeWorkspace :: Defined ) )
1244
+ . seq ( |value| {
1245
+ value
1246
+ . deserialize ( )
1247
+ . map ( VecStringOrBool :: VecString )
1248
+ . map ( MaybeWorkspace :: Defined )
1249
+ } )
1250
+ . map ( |value| value. deserialize ( ) . map ( MaybeWorkspace :: Workspace ) )
1251
+ . deserialize ( deserializer)
1363
1252
}
1364
1253
}
1365
1254
0 commit comments