@@ -39,6 +39,14 @@ pub const EMPTY_ERROR_METADATA: ErrorMetadata = ErrorMetadata {
39
39
/// For many services, Errors are modeled. However, many services only partially model errors or don't
40
40
/// model errors at all. In these cases, the SDK will return this generic error type to expose the
41
41
/// `code`, `message` and `request_id`.
42
+ #[ cfg_attr(
43
+ all( aws_sdk_unstable, feature = "serde-serialize" ) ,
44
+ derive( serde:: Serialize )
45
+ ) ]
46
+ #[ cfg_attr(
47
+ all( aws_sdk_unstable, feature = "serde-deserialize" ) ,
48
+ derive( serde:: Deserialize )
49
+ ) ]
42
50
#[ derive( Debug , Eq , PartialEq , Default , Clone ) ]
43
51
pub struct ErrorMetadata {
44
52
code : Option < String > ,
@@ -47,8 +55,23 @@ pub struct ErrorMetadata {
47
55
}
48
56
49
57
/// Builder for [`ErrorMetadata`].
58
+ #[ cfg_attr(
59
+ all( aws_sdk_unstable, feature = "serde-serialize" ) ,
60
+ derive( serde:: Serialize )
61
+ ) ]
62
+ #[ cfg_attr(
63
+ all( aws_sdk_unstable, feature = "serde-deserialize" ) ,
64
+ derive( serde:: Deserialize )
65
+ ) ]
50
66
#[ derive( Debug , Default ) ]
51
67
pub struct Builder {
68
+ #[ cfg_attr(
69
+ any(
70
+ all( aws_sdk_unstable, feature = "serde-deserialize" ) ,
71
+ all( aws_sdk_unstable, feature = "serde-serialize" )
72
+ ) ,
73
+ serde( flatten)
74
+ ) ]
52
75
inner : ErrorMetadata ,
53
76
}
54
77
@@ -164,3 +187,36 @@ impl fmt::Display for ErrorMetadata {
164
187
}
165
188
166
189
impl std:: error:: Error for ErrorMetadata { }
190
+
191
+ #[ cfg( all(
192
+ test,
193
+ any(
194
+ all( aws_sdk_unstable, feature = "serde-deserialize" ) ,
195
+ all( aws_sdk_unstable, feature = "serde-serialize" )
196
+ )
197
+ ) ) ]
198
+ mod test {
199
+ use super :: * ;
200
+
201
+ #[ test]
202
+ /// tests de/ser on ErrorMetaData.
203
+ fn test_error_meta_data ( ) {
204
+ let mut data = Builder :: default ( )
205
+ . code ( "code" )
206
+ . message ( "message" )
207
+ . custom ( "hello" , "world" ) ;
208
+ let ok = serde_json:: to_string_pretty ( & EMPTY_ERROR_METADATA ) . unwrap ( ) ;
209
+ assert_eq ! (
210
+ & ok,
211
+ include_str!( "../../test-data/error_meta_data_empty.json" )
212
+ ) ;
213
+ assert_eq ! (
214
+ serde_json:: from_str( include_str!( "../../test-data/error_meta_data.json" ) ) . unwrap( ) ,
215
+ & data
216
+ ) ;
217
+ assert_eq ! (
218
+ serde_json:: from_str( include_str!( "../../test-data/error_meta_data.json" ) ) . unwrap( ) ,
219
+ data. build( )
220
+ ) ;
221
+ }
222
+ }
0 commit comments