@@ -15,60 +15,6 @@ pub struct BrowsersResolver {
15
15
value : String ,
16
16
}
17
17
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
-
72
18
impl ArchiveWith < Browsers > for AsPreset {
73
19
type Archived = ArchivedString ;
74
20
type Resolver = BrowsersResolver ;
89
35
field : & Browsers ,
90
36
serializer : & mut S ,
91
37
) -> 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" ) ) ?;
93
40
let inner = ArchivedString :: serialize_from_str ( & value, serializer) ?;
94
41
Ok ( BrowsersResolver { value, inner } )
95
42
}
103
50
field : & ArchivedString ,
104
51
_deserializer : & mut D ,
105
52
) -> 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" ) )
107
55
}
108
56
}
0 commit comments