@@ -33,43 +33,64 @@ impl From<ParseError> for Error {
33
33
mod status {
34
34
use std:: convert:: TryFrom ;
35
35
36
- use serde:: { Deserialize , Serialize , Serializer } ;
36
+ use serde:: de:: IgnoredAny ;
37
+ use serde:: { Deserialize , Serialize } ;
37
38
38
39
use super :: { Error , SpotifyError } ;
39
40
40
- fn serialize_status_code < S : Serializer > ( code : & u32 , serializer : S ) -> Result < S :: Ok , S :: Error > {
41
- #[ derive( Serialize ) ]
42
- #[ serde( rename_all = "camelCase" ) ]
43
- struct Repr {
44
- status : u32 ,
45
- status_string : & ' static str ,
41
+ #[ derive( Serialize ) ]
42
+ #[ serde( rename_all = "camelCase" ) ]
43
+ struct StatusSerialize {
44
+ spotify_error : u32 ,
45
+ status : u32 ,
46
+ status_string : & ' static str ,
47
+ }
48
+
49
+ impl From < Status > for StatusSerialize {
50
+ fn from ( st : Status ) -> Self {
51
+ let status_string = match & st. status {
52
+ 101 => "OK" ,
53
+ 301 => "ERROR-MISSING-ACTION" ,
54
+ 302 => "ERROR-INVALID-ACTION" ,
55
+ 303 => "ERROR-INVALID-ARGUMENTS" ,
56
+ 402 => "ERROR-SPOTIFY-ERROR" ,
57
+ _ => "ERROR-UNKNOWN" ,
58
+ } ;
59
+
60
+ Self {
61
+ spotify_error : st. spotify_error ,
62
+ status : st. status ,
63
+ status_string,
64
+ }
46
65
}
66
+ }
47
67
48
- let status_string = match code {
49
- 101 => "OK" ,
50
- 301 => "ERROR-MISSING-ACTION" ,
51
- 302 => "ERROR-INVALID-ACTION" ,
52
- 303 => "ERROR-INVALID-ARGUMENTS" ,
53
- 402 => "ERROR-SPOTIFY-ERROR" ,
54
- _ => "ERROR-UNKNOWN" ,
55
- } ;
68
+ # [ derive ( Deserialize ) ]
69
+ # [ serde ( rename_all = "camelCase" ) ]
70
+ struct StatusDeserialize {
71
+ spotify_error : u32 ,
72
+ status : u32 ,
73
+ # [ allow ( dead_code ) ]
74
+ status_string : IgnoredAny ,
75
+ }
56
76
57
- Repr {
58
- status : * code,
59
- status_string,
77
+ impl From < StatusDeserialize > for Status {
78
+ fn from ( st : StatusDeserialize ) -> Self {
79
+ Self {
80
+ spotify_error : st. spotify_error ,
81
+ status : st. status ,
82
+ }
60
83
}
61
- . serialize ( serializer)
62
84
}
63
85
64
86
/// Helper type to serialize a status. It must be imagined
65
87
/// isomorphic to `Result<(), super::Error>`, and they are
66
88
/// freely convertible.
67
89
#[ derive( Clone , Debug , Serialize , Deserialize ) ]
68
- #[ serde( rename_all = "camelCase " ) ]
90
+ #[ serde( into = "StatusSerialize" , from = "StatusDeserialize ") ]
69
91
pub struct Status {
70
- spotify_error : SpotifyError ,
71
- #[ serde( flatten, serialize_with = "serialize_status_code" ) ]
72
92
status : u32 ,
93
+ spotify_error : SpotifyError ,
73
94
}
74
95
75
96
impl Status {
0 commit comments