aws_sdk_budgets/protocol_serde/
shape_budget.rs1pub fn ser_budget(
3 object: &mut ::aws_smithy_json::serialize::JsonObjectWriter,
4 input: &crate::types::Budget,
5) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::SerializationError> {
6 {
7 object.key("BudgetName").string(input.budget_name.as_str());
8 }
9 if let Some(var_1) = &input.budget_limit {
10 #[allow(unused_mut)]
11 let mut object_2 = object.key("BudgetLimit").start_object();
12 crate::protocol_serde::shape_spend::ser_spend(&mut object_2, var_1)?;
13 object_2.finish();
14 }
15 if let Some(var_3) = &input.planned_budget_limits {
16 #[allow(unused_mut)]
17 let mut object_4 = object.key("PlannedBudgetLimits").start_object();
18 for (key_5, value_6) in var_3 {
19 {
20 #[allow(unused_mut)]
21 let mut object_7 = object_4.key(key_5.as_str()).start_object();
22 crate::protocol_serde::shape_spend::ser_spend(&mut object_7, value_6)?;
23 object_7.finish();
24 }
25 }
26 object_4.finish();
27 }
28 if let Some(var_8) = &input.cost_filters {
29 #[allow(unused_mut)]
30 let mut object_9 = object.key("CostFilters").start_object();
31 for (key_10, value_11) in var_8 {
32 {
33 let mut array_12 = object_9.key(key_10.as_str()).start_array();
34 for item_13 in value_11 {
35 {
36 array_12.value().string(item_13.as_str());
37 }
38 }
39 array_12.finish();
40 }
41 }
42 object_9.finish();
43 }
44 if let Some(var_14) = &input.cost_types {
45 #[allow(unused_mut)]
46 let mut object_15 = object.key("CostTypes").start_object();
47 crate::protocol_serde::shape_cost_types::ser_cost_types(&mut object_15, var_14)?;
48 object_15.finish();
49 }
50 {
51 object.key("TimeUnit").string(input.time_unit.as_str());
52 }
53 if let Some(var_16) = &input.time_period {
54 #[allow(unused_mut)]
55 let mut object_17 = object.key("TimePeriod").start_object();
56 crate::protocol_serde::shape_time_period::ser_time_period(&mut object_17, var_16)?;
57 object_17.finish();
58 }
59 if let Some(var_18) = &input.calculated_spend {
60 #[allow(unused_mut)]
61 let mut object_19 = object.key("CalculatedSpend").start_object();
62 crate::protocol_serde::shape_calculated_spend::ser_calculated_spend(&mut object_19, var_18)?;
63 object_19.finish();
64 }
65 {
66 object.key("BudgetType").string(input.budget_type.as_str());
67 }
68 if let Some(var_20) = &input.last_updated_time {
69 object
70 .key("LastUpdatedTime")
71 .date_time(var_20, ::aws_smithy_types::date_time::Format::EpochSeconds)?;
72 }
73 if let Some(var_21) = &input.auto_adjust_data {
74 #[allow(unused_mut)]
75 let mut object_22 = object.key("AutoAdjustData").start_object();
76 crate::protocol_serde::shape_auto_adjust_data::ser_auto_adjust_data(&mut object_22, var_21)?;
77 object_22.finish();
78 }
79 if let Some(var_23) = &input.filter_expression {
80 #[allow(unused_mut)]
81 let mut object_24 = object.key("FilterExpression").start_object();
82 crate::protocol_serde::shape_expression::ser_expression(&mut object_24, var_23)?;
83 object_24.finish();
84 }
85 if let Some(var_25) = &input.metrics {
86 let mut array_26 = object.key("Metrics").start_array();
87 for item_27 in var_25 {
88 {
89 array_26.value().string(item_27.as_str());
90 }
91 }
92 array_26.finish();
93 }
94 if let Some(var_28) = &input.billing_view_arn {
95 object.key("BillingViewArn").string(var_28.as_str());
96 }
97 if let Some(var_29) = &input.health_status {
98 #[allow(unused_mut)]
99 let mut object_30 = object.key("HealthStatus").start_object();
100 crate::protocol_serde::shape_health_status::ser_health_status(&mut object_30, var_29)?;
101 object_30.finish();
102 }
103 Ok(())
104}
105
106pub(crate) fn de_budget<'a, I>(
107 tokens: &mut ::std::iter::Peekable<I>,
108 _value: &'a [u8],
109) -> ::std::result::Result<Option<crate::types::Budget>, ::aws_smithy_json::deserialize::error::DeserializeError>
110where
111 I: Iterator<Item = Result<::aws_smithy_json::deserialize::Token<'a>, ::aws_smithy_json::deserialize::error::DeserializeError>>,
112{
113 match tokens.next().transpose()? {
114 Some(::aws_smithy_json::deserialize::Token::ValueNull { .. }) => Ok(None),
115 Some(::aws_smithy_json::deserialize::Token::StartObject { .. }) => {
116 #[allow(unused_mut)]
117 let mut builder = crate::types::builders::BudgetBuilder::default();
118 loop {
119 match tokens.next().transpose()? {
120 Some(::aws_smithy_json::deserialize::Token::EndObject { .. }) => break,
121 Some(::aws_smithy_json::deserialize::Token::ObjectKey { key, .. }) => match key.to_unescaped()?.as_ref() {
122 "BudgetName" => {
123 builder = builder.set_budget_name(
124 ::aws_smithy_json::deserialize::token::expect_string_or_null(tokens.next())?
125 .map(|s| s.to_unescaped().map(|u| u.into_owned()))
126 .transpose()?,
127 );
128 }
129 "BudgetLimit" => {
130 builder = builder.set_budget_limit(crate::protocol_serde::shape_spend::de_spend(tokens, _value)?);
131 }
132 "PlannedBudgetLimits" => {
133 builder = builder.set_planned_budget_limits(
134 crate::protocol_serde::shape_planned_budget_limits::de_planned_budget_limits(tokens, _value)?,
135 );
136 }
137 "CostFilters" => {
138 builder = builder.set_cost_filters(crate::protocol_serde::shape_cost_filters::de_cost_filters(tokens, _value)?);
139 }
140 "CostTypes" => {
141 builder = builder.set_cost_types(crate::protocol_serde::shape_cost_types::de_cost_types(tokens, _value)?);
142 }
143 "TimeUnit" => {
144 builder = builder.set_time_unit(
145 ::aws_smithy_json::deserialize::token::expect_string_or_null(tokens.next())?
146 .map(|s| s.to_unescaped().map(|u| crate::types::TimeUnit::from(u.as_ref())))
147 .transpose()?,
148 );
149 }
150 "TimePeriod" => {
151 builder = builder.set_time_period(crate::protocol_serde::shape_time_period::de_time_period(tokens, _value)?);
152 }
153 "CalculatedSpend" => {
154 builder =
155 builder.set_calculated_spend(crate::protocol_serde::shape_calculated_spend::de_calculated_spend(tokens, _value)?);
156 }
157 "BudgetType" => {
158 builder = builder.set_budget_type(
159 ::aws_smithy_json::deserialize::token::expect_string_or_null(tokens.next())?
160 .map(|s| s.to_unescaped().map(|u| crate::types::BudgetType::from(u.as_ref())))
161 .transpose()?,
162 );
163 }
164 "LastUpdatedTime" => {
165 builder = builder.set_last_updated_time(::aws_smithy_json::deserialize::token::expect_timestamp_or_null(
166 tokens.next(),
167 ::aws_smithy_types::date_time::Format::EpochSeconds,
168 )?);
169 }
170 "AutoAdjustData" => {
171 builder =
172 builder.set_auto_adjust_data(crate::protocol_serde::shape_auto_adjust_data::de_auto_adjust_data(tokens, _value)?);
173 }
174 "FilterExpression" => {
175 builder = builder.set_filter_expression(crate::protocol_serde::shape_expression::de_expression(tokens, _value)?);
176 }
177 "Metrics" => {
178 builder = builder.set_metrics(crate::protocol_serde::shape_metrics::de_metrics(tokens, _value)?);
179 }
180 "BillingViewArn" => {
181 builder = builder.set_billing_view_arn(
182 ::aws_smithy_json::deserialize::token::expect_string_or_null(tokens.next())?
183 .map(|s| s.to_unescaped().map(|u| u.into_owned()))
184 .transpose()?,
185 );
186 }
187 "HealthStatus" => {
188 builder = builder.set_health_status(crate::protocol_serde::shape_health_status::de_health_status(tokens, _value)?);
189 }
190 _ => ::aws_smithy_json::deserialize::token::skip_value(tokens)?,
191 },
192 other => {
193 return Err(::aws_smithy_json::deserialize::error::DeserializeError::custom(format!(
194 "expected object key or end object, found: {other:?}"
195 )))
196 }
197 }
198 }
199 Ok(Some(crate::serde_util::budget_correct_errors(builder).build().map_err(|err| {
200 ::aws_smithy_json::deserialize::error::DeserializeError::custom_source("Response was invalid", err)
201 })?))
202 }
203 _ => Err(::aws_smithy_json::deserialize::error::DeserializeError::custom(
204 "expected start object or null",
205 )),
206 }
207}