|
3 | 3 | * SPDX-License-Identifier: Apache-2.0
|
4 | 4 | */
|
5 | 5 |
|
| 6 | +//! A number type that implements Javascript / JSON semantics. |
| 7 | +
|
6 | 8 | use crate::error::{TryFromNumberError, TryFromNumberErrorKind};
|
| 9 | +#[cfg(all( |
| 10 | + aws_sdk_unstable, |
| 11 | + any(feature = "serde-serialize", feature = "serde-deserialize") |
| 12 | +))] |
| 13 | +use serde; |
7 | 14 |
|
8 | 15 | /// A number type that implements Javascript / JSON semantics, modeled on serde_json:
|
9 | 16 | /// <https://docs.serde.rs/src/serde_json/number.rs.html#20-22>
|
10 | 17 | #[derive(Debug, Clone, Copy, PartialEq)]
|
| 18 | +#[cfg_attr( |
| 19 | + all(aws_sdk_unstable, feature = "serde-deserialize"), |
| 20 | + derive(serde::Deserialize) |
| 21 | +)] |
| 22 | +#[cfg_attr( |
| 23 | + all(aws_sdk_unstable, feature = "serde-serialize"), |
| 24 | + derive(serde::Serialize) |
| 25 | +)] |
| 26 | +#[cfg_attr( |
| 27 | + any( |
| 28 | + all(aws_sdk_unstable, feature = "serde-deserialize"), |
| 29 | + all(aws_sdk_unstable, feature = "serde-serialize") |
| 30 | + ), |
| 31 | + serde(untagged) |
| 32 | +)] |
11 | 33 | pub enum Number {
|
12 | 34 | /// Unsigned 64-bit integer value.
|
13 | 35 | PosInt(u64),
|
@@ -441,4 +463,31 @@ mod test {
|
441 | 463 | 1452089100f32
|
442 | 464 | );
|
443 | 465 | }
|
| 466 | + |
| 467 | + #[test] |
| 468 | + #[cfg(all( |
| 469 | + test, |
| 470 | + aws_sdk_unstable, |
| 471 | + feature = "serde-deserialize", |
| 472 | + feature = "serde-serialize" |
| 473 | + ))] |
| 474 | + /// ensures that numbers are deserialized as expected |
| 475 | + /// 0 <= PosInt |
| 476 | + /// 0 > NegInt |
| 477 | + /// non integer values == Float |
| 478 | + fn number_serde() { |
| 479 | + let n: Number = serde_json::from_str("1.1").unwrap(); |
| 480 | + assert_eq!(n, Number::Float(1.1)); |
| 481 | + let n: Number = serde_json::from_str("1").unwrap(); |
| 482 | + assert_eq!(n, Number::PosInt(1)); |
| 483 | + let n: Number = serde_json::from_str("0").unwrap(); |
| 484 | + assert_eq!(n, Number::PosInt(0)); |
| 485 | + let n: Number = serde_json::from_str("-1").unwrap(); |
| 486 | + assert_eq!(n, Number::NegInt(-1)); |
| 487 | + |
| 488 | + assert_eq!("1.1", serde_json::to_string(&Number::Float(1.1)).unwrap()); |
| 489 | + assert_eq!("1", serde_json::to_string(&Number::PosInt(1)).unwrap()); |
| 490 | + assert_eq!("0", serde_json::to_string(&Number::PosInt(0)).unwrap()); |
| 491 | + assert_eq!("-1", serde_json::to_string(&Number::NegInt(-1)).unwrap()); |
| 492 | + } |
444 | 493 | }
|
0 commit comments