File tree 1 file changed +22
-5
lines changed
1 file changed +22
-5
lines changed Original file line number Diff line number Diff line change @@ -2281,11 +2281,28 @@ impl<'de> serde::Deserialize<'de> for Url {
2281
2281
where
2282
2282
D : serde:: Deserializer < ' de > ,
2283
2283
{
2284
- use serde:: de:: { Error , Unexpected } ;
2285
- let string_representation: String = serde:: Deserialize :: deserialize ( deserializer) ?;
2286
- Url :: parse ( & string_representation) . map_err ( |err| {
2287
- Error :: invalid_value ( Unexpected :: Str ( & string_representation) , & err. description ( ) )
2288
- } )
2284
+ use serde:: de:: { Error , Unexpected , Visitor } ;
2285
+
2286
+ struct UrlVisitor ;
2287
+
2288
+ impl < ' de > Visitor < ' de > for UrlVisitor {
2289
+ type Value = Url ;
2290
+
2291
+ fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
2292
+ formatter. write_str ( "a string representing an URL" )
2293
+ }
2294
+
2295
+ fn visit_str < E > ( self , s : & str ) -> Result < Self :: Value , E >
2296
+ where
2297
+ E : Error ,
2298
+ {
2299
+ Url :: parse ( s) . map_err ( |err| {
2300
+ Error :: invalid_value ( Unexpected :: Str ( s) , & err. description ( ) )
2301
+ } )
2302
+ }
2303
+ }
2304
+
2305
+ deserializer. deserialize_str ( UrlVisitor )
2289
2306
}
2290
2307
}
2291
2308
You can’t perform that action at this time.
0 commit comments