@@ -15,60 +15,6 @@ pub struct BrowsersResolver {
1515 value : String ,
1616}
1717
18- // Helper functions for custom serialization without serde
19- fn browsers_to_string ( browsers : & Browsers ) -> String {
20- let parts = vec ! [
21- browsers. android. map( |v| format!( "android:{}" , v) ) ,
22- browsers. chrome. map( |v| format!( "chrome:{}" , v) ) ,
23- browsers. edge. map( |v| format!( "edge:{}" , v) ) ,
24- browsers. firefox. map( |v| format!( "firefox:{}" , v) ) ,
25- browsers. ie. map( |v| format!( "ie:{}" , v) ) ,
26- browsers. ios_saf. map( |v| format!( "ios_saf:{}" , v) ) ,
27- browsers. opera. map( |v| format!( "opera:{}" , v) ) ,
28- browsers. safari. map( |v| format!( "safari:{}" , v) ) ,
29- browsers. samsung. map( |v| format!( "samsung:{}" , v) ) ,
30- ] ;
31-
32- parts. into_iter ( ) . flatten ( ) . collect :: < Vec < _ > > ( ) . join ( "," )
33- }
34-
35- fn string_to_browsers ( s : & str ) -> Result < Browsers , DeserializeError > {
36- let mut browsers = Browsers :: default ( ) ;
37-
38- if s. is_empty ( ) {
39- return Ok ( browsers) ;
40- }
41-
42- for part in s. split ( ',' ) {
43- let mut split = part. split ( ':' ) ;
44- let browser = split
45- . next ( )
46- . ok_or_else ( || DeserializeError :: MessageError ( "invalid browser format" ) ) ?;
47- let version_str = split
48- . next ( )
49- . ok_or_else ( || DeserializeError :: MessageError ( "invalid browser format" ) ) ?;
50-
51- let version = version_str
52- . parse :: < u32 > ( )
53- . map_err ( |_| DeserializeError :: MessageError ( "invalid version format" ) ) ?;
54-
55- match browser {
56- "android" => browsers. android = Some ( version) ,
57- "chrome" => browsers. chrome = Some ( version) ,
58- "edge" => browsers. edge = Some ( version) ,
59- "firefox" => browsers. firefox = Some ( version) ,
60- "ie" => browsers. ie = Some ( version) ,
61- "ios_saf" => browsers. ios_saf = Some ( version) ,
62- "opera" => browsers. opera = Some ( version) ,
63- "safari" => browsers. safari = Some ( version) ,
64- "samsung" => browsers. samsung = Some ( version) ,
65- _ => return Err ( DeserializeError :: MessageError ( "unknown browser" ) ) ,
66- }
67- }
68-
69- Ok ( browsers)
70- }
71-
7218impl ArchiveWith < Browsers > for AsPreset {
7319 type Archived = ArchivedString ;
7420 type Resolver = BrowsersResolver ;
8935 field : & Browsers ,
9036 serializer : & mut S ,
9137 ) -> Result < Self :: Resolver , SerializeError > {
92- let value = browsers_to_string ( field) ;
38+ let value = serde_json:: to_string ( field)
39+ . map_err ( |_| SerializeError :: MessageError ( "serialize serde_json value failed" ) ) ?;
9340 let inner = ArchivedString :: serialize_from_str ( & value, serializer) ?;
9441 Ok ( BrowsersResolver { value, inner } )
9542 }
10350 field : & ArchivedString ,
10451 _deserializer : & mut D ,
10552 ) -> Result < Browsers , DeserializeError > {
106- string_to_browsers ( field. as_str ( ) )
53+ serde_json:: from_str ( field. as_str ( ) )
54+ . map_err ( |_| DeserializeError :: MessageError ( "deserialize serde_json value failed" ) )
10755 }
10856}
0 commit comments