mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-25 20:01:50 +00:00
Bug 1817900 - Update rust_decimal to 1.28.1. r=emilio,supply-chain-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D170453
This commit is contained in:
parent
f441e0bb77
commit
fd46c51d7f
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -4659,9 +4659,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rust_decimal"
|
||||
version = "1.27.0"
|
||||
version = "1.28.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "33c321ee4e17d2b7abe12b5d20c1231db708dd36185c8a21e9de5fed6da4dbe9"
|
||||
checksum = "e13cf35f7140155d02ba4ec3294373d513a3c7baa8364c162b030e33c61520a8"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"num-traits",
|
||||
|
@ -2049,6 +2049,11 @@ who = "Mike Hommey <mh+mozilla@glandium.org>"
|
||||
criteria = "safe-to-deploy"
|
||||
delta = "1.26.1 -> 1.27.0"
|
||||
|
||||
[[audits.rust_decimal]]
|
||||
who = "Mike Hommey <mh+mozilla@glandium.org>"
|
||||
criteria = "safe-to-deploy"
|
||||
delta = "1.27.0 -> 1.28.1"
|
||||
|
||||
[[audits.rustc-hash]]
|
||||
who = "Bobby Holley <bobbyholley@gmail.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
|
@ -1 +1 @@
|
||||
{"files":{"BUILD.md":"302c5260cb6eb87efc1d968b42f082ea3569cca084c0cbcc1821a8670235c19a","CHANGELOG.md":"e5e9c86930f1e0e939c17d6fb3b24edd35c50cdcbcefc1737ee22ffb854a17ad","CODE_OF_CONDUCT.md":"64765f10290cfce7191b4208cb21698b708a118568f5016602cccc304846a09a","CONTRIBUTING.md":"471d6281fb5038e17e32d3b4450aacf542a396709605aa170e07d3971d70b9c1","Cargo.toml":"0cbab1d6804a7e986912ed474bafd1f2c6481d7da38344340ea66c0b6fc291b6","LICENSE":"f8218253704e32441cafea1b9b3bcb2c6a3c51c5553cd8513d179290202bccb2","Makefile.toml":"d8d548ac651ce87294bafb6f55bedd1e6e78ce6332594963f6d02db9d7452d13","README.md":"7c954859ce5f2e41584a966d919e52e69c0c37c8c5694c321591bca2c35a4fa6","benches/comparison.rs":"e8b14531b129acb8ffca2dd44565d9160f510ec38abd32fc49fd4e2386067e25","benches/lib_benches.rs":"899ecdd258350ab1c49218b8f0213bbbc2ae937093bd0afa46be7eb1a28afd72","build.rs":"ae5b0e60460390f8411e19d7721524f492a8a988132c74f05867a261b513d54e","rustfmt.toml":"f33bda44a494d17c95b7bc1b3dd88c203030b75be766f3a7f9b63ef45d960bb0","src/arithmetic_impls.rs":"87a87bc46214ba7f239dfafcffb6ca05453f2ff07ed36e94792548d508da7a9d","src/constants.rs":"5a31626a234e4bb1f06752d7db6ebb39a543c5e0df1e929dd0032689ef7aaa1f","src/decimal.rs":"b73235b13b1f2c3aeb9dd3893a0127cde14d99856aba5d19c210c62b57426e63","src/error.rs":"27cdf052d2a956b81cfe0bf512354e3e0772fa9fe5a2a9e8b2246a53ed58ad28","src/fuzz.rs":"86c07d8d541b9ee92a51275993b686902712f94c30785ba93f38997f3569e700","src/lib.rs":"0a8ee05028cd74878fda08d40850e75704349b9782bc5ad9462be7127d09312c","src/maths.rs":"f82016c5ae8406103835a3fedebeb1360cfe3cc40ac4ab28e13da89636c6782c","src/mysql.rs":"3352e1d72561b022427539fc5025f5f01f00be65ebf6492761668effc9e1eeeb","src/ops.rs":"4d426a35f73b0b69cbceee6e01c6eff59b8cc09aab7c885570aea52d8f258f66","src/ops/add.rs":"a85b6214be92a5563e8bb4a936275d8de094507d77384c9184d63583a78b3f55","src/ops/array.rs":"17a1af576390c8f33ed6c13e1b62722eeaa24c0c0086fb951def6d5dacfdc1cd","src/ops/cmp.rs":"95437401daf93d60425c388fc243e52ad5570cfe6c5d818b5aa144759a5f2ef1","src/ops/common.rs":"6d48ecfa4796a38cb9d4c48f50ffed5d1ee79ba8e168a175615b6fe97194b7c2","src/ops/div.rs":"6b1e90b383293eb51f20f22846002a61f17211f7791860d4e9d6f82ad940fb87","src/ops/legacy.rs":"08bc45454b1815a592cc2fd02df8c50bec36c831ab7af098018e29dfc81f0ec4","src/ops/mul.rs":"b0bb69461b4934cb53c49e105d21da8aa661e1215e8797b8fdc64564df431d92","src/ops/rem.rs":"125d64e9425effd01d4ff400f811f43ef76bf846b6823195059648fdf004b592","src/postgres.rs":"34e35b73cb55fa5f303251f3e074c4e30509973900810a9f423f80294effcc05","src/postgres/common.rs":"7f52920a83f9c5081f7b7a626ef4cff65bbaef51133c7eaf364318212d4aed15","src/postgres/diesel.rs":"fb2d7783d279730a6c77458c6bb58f839e9b48d8209ed2e8395e2f72d7032c87","src/postgres/driver.rs":"de3081afea1038ff1d69d10b62ea65f97186c7ad949f964db0cdb17979bdd763","src/rand.rs":"382f057f4a8752a6028afbecd3cb27422d530c6aa0142ddc04b698b501f8f9db","src/rocket.rs":"4d05f292281e4d463abeba603b07ea460065cb1b8ec1c6dafdb4e41f7b89e828","src/serde.rs":"dbb622e628b799d556a23a6fe52bd5bc33726e9cb661b48535c61f50bcf12cae","src/str.rs":"ca8ce5a61fc7d940355a8f1154492a62d06a8c2f825061044a1d422354d6c5ea","tests/decimal_tests.rs":"b2d4a497942575acb0b87e87c9cd17b6afb2ce0fb4e8a359f197fa417228b323","tests/macros.rs":"f4e1ade99bf8a7aaf2a2d4ee557df5b0b32266a349daf59b2e8b1ae7bc72599c","tests/version-numbers.rs":"73301b7bfe500eada5ede66f0dce89bd3e354af50a8e7a123b02931cd5eb8e16"},"package":"33c321ee4e17d2b7abe12b5d20c1231db708dd36185c8a21e9de5fed6da4dbe9"}
|
||||
{"files":{"BUILD.md":"302c5260cb6eb87efc1d968b42f082ea3569cca084c0cbcc1821a8670235c19a","CHANGELOG.md":"f4eab626b23c7a76e17e2601e7e6fc920090134f59411472c0eaab5b06bd62d1","CODE_OF_CONDUCT.md":"64765f10290cfce7191b4208cb21698b708a118568f5016602cccc304846a09a","CONTRIBUTING.md":"471d6281fb5038e17e32d3b4450aacf542a396709605aa170e07d3971d70b9c1","Cargo.toml":"70a6cc3be824c2c135094b3f217262d86d16a3bc613acf9a12c71cb317002bec","LICENSE":"f8218253704e32441cafea1b9b3bcb2c6a3c51c5553cd8513d179290202bccb2","Makefile.toml":"d8d548ac651ce87294bafb6f55bedd1e6e78ce6332594963f6d02db9d7452d13","README.md":"c65eef618921de6d55955f7ec88c5fdde88a2b8ccdcab6e7fd07def01d90ab14","benches/comparison.rs":"e8b14531b129acb8ffca2dd44565d9160f510ec38abd32fc49fd4e2386067e25","benches/lib_benches.rs":"899ecdd258350ab1c49218b8f0213bbbc2ae937093bd0afa46be7eb1a28afd72","build.rs":"ae5b0e60460390f8411e19d7721524f492a8a988132c74f05867a261b513d54e","rustfmt.toml":"f33bda44a494d17c95b7bc1b3dd88c203030b75be766f3a7f9b63ef45d960bb0","src/arithmetic_impls.rs":"87a87bc46214ba7f239dfafcffb6ca05453f2ff07ed36e94792548d508da7a9d","src/constants.rs":"5a31626a234e4bb1f06752d7db6ebb39a543c5e0df1e929dd0032689ef7aaa1f","src/decimal.rs":"f4f9883e1196b1b316dc7fcaaf94f8b06963ab1d26d56274caaf793afca582b2","src/error.rs":"27cdf052d2a956b81cfe0bf512354e3e0772fa9fe5a2a9e8b2246a53ed58ad28","src/fuzz.rs":"86c07d8d541b9ee92a51275993b686902712f94c30785ba93f38997f3569e700","src/lib.rs":"efff31de36fdfd0b8959982e4dc42eda6512f5fa5bb66fe25eb5ba948f0af6f2","src/maths.rs":"f82016c5ae8406103835a3fedebeb1360cfe3cc40ac4ab28e13da89636c6782c","src/mysql.rs":"3352e1d72561b022427539fc5025f5f01f00be65ebf6492761668effc9e1eeeb","src/ops.rs":"4d426a35f73b0b69cbceee6e01c6eff59b8cc09aab7c885570aea52d8f258f66","src/ops/add.rs":"a85b6214be92a5563e8bb4a936275d8de094507d77384c9184d63583a78b3f55","src/ops/array.rs":"8a900c845e52843f34ae19742a5886cd8becf54ddd6d1923fd0fbd9588c605e9","src/ops/cmp.rs":"95437401daf93d60425c388fc243e52ad5570cfe6c5d818b5aa144759a5f2ef1","src/ops/common.rs":"6d48ecfa4796a38cb9d4c48f50ffed5d1ee79ba8e168a175615b6fe97194b7c2","src/ops/div.rs":"6b1e90b383293eb51f20f22846002a61f17211f7791860d4e9d6f82ad940fb87","src/ops/legacy.rs":"08bc45454b1815a592cc2fd02df8c50bec36c831ab7af098018e29dfc81f0ec4","src/ops/mul.rs":"b0bb69461b4934cb53c49e105d21da8aa661e1215e8797b8fdc64564df431d92","src/ops/rem.rs":"125d64e9425effd01d4ff400f811f43ef76bf846b6823195059648fdf004b592","src/postgres.rs":"34e35b73cb55fa5f303251f3e074c4e30509973900810a9f423f80294effcc05","src/postgres/common.rs":"7f52920a83f9c5081f7b7a626ef4cff65bbaef51133c7eaf364318212d4aed15","src/postgres/diesel.rs":"fb2d7783d279730a6c77458c6bb58f839e9b48d8209ed2e8395e2f72d7032c87","src/postgres/driver.rs":"dfc5001e4d6235e8ce535066887a910681581e9e1aedffd73b265c065dbc497c","src/rand.rs":"382f057f4a8752a6028afbecd3cb27422d530c6aa0142ddc04b698b501f8f9db","src/rocket.rs":"4d05f292281e4d463abeba603b07ea460065cb1b8ec1c6dafdb4e41f7b89e828","src/serde.rs":"b3fda74ee7ec9317e074f2d271a59ae6024c2a324beef1169d5df1747dad9ba2","src/str.rs":"ca8ce5a61fc7d940355a8f1154492a62d06a8c2f825061044a1d422354d6c5ea","tests/decimal_tests.rs":"6e06f4f9558e983c1e39875508f5e96341284664e0f245b2b265587c3b5ab3a0","tests/macros.rs":"f4e1ade99bf8a7aaf2a2d4ee557df5b0b32266a349daf59b2e8b1ae7bc72599c","tests/version-numbers.rs":"73301b7bfe500eada5ede66f0dce89bd3e354af50a8e7a123b02931cd5eb8e16"},"package":"e13cf35f7140155d02ba4ec3294373d513a3c7baa8364c162b030e33c61520a8"}
|
24
third_party/rust/rust_decimal/CHANGELOG.md
vendored
24
third_party/rust/rust_decimal/CHANGELOG.md
vendored
@ -1,5 +1,29 @@
|
||||
# Version History
|
||||
|
||||
## 1.28.1
|
||||
|
||||
### Fixed
|
||||
|
||||
* Bumped `borsh` and `criterion` dependencies to the latest versions. ([#568](https://github.com/paupino/rust-decimal/pull/568))
|
||||
* Removed erroneous debug statements in `serde-with-str` feature. ([#571](https://github.com/paupino/rust-decimal/pull/571))
|
||||
|
||||
Thanks [@attila-lin](https://github.com/attila-lin) for your help bumping dependencies.
|
||||
|
||||
## 1.28.0
|
||||
|
||||
### Added
|
||||
|
||||
* Implement `TryFrom<&str>` for `Decimal` ([#560](https://github.com/paupino/rust-decimal/pull/560))
|
||||
|
||||
### Fixed
|
||||
|
||||
* Explicit string deserialize for `Option<Decimal>` when using `serde-with-str` ([#565](https://github.com/paupino/rust-decimal/pull/565))
|
||||
* Fix for `rescale` preventing `Decimal::ZERO` to be rescaled to an invalid precision ([#566](https://github.com/paupino/rust-decimal/pull/566))
|
||||
|
||||
### Credit
|
||||
|
||||
Thank you to [@c410-f3r](https://github.com/c410-f3r) for your diligent help adding features to this library!
|
||||
|
||||
## 1.27.0
|
||||
|
||||
### Added
|
||||
|
7
third_party/rust/rust_decimal/Cargo.toml
vendored
7
third_party/rust/rust_decimal/Cargo.toml
vendored
@ -13,7 +13,7 @@
|
||||
edition = "2021"
|
||||
rust-version = "1.60"
|
||||
name = "rust_decimal"
|
||||
version = "1.27.0"
|
||||
version = "1.28.1"
|
||||
authors = ["Paul Mason <paul@form1.co.nz>"]
|
||||
build = "build.rs"
|
||||
exclude = ["tests/generated/*"]
|
||||
@ -53,7 +53,7 @@ version = "0.7"
|
||||
default-features = false
|
||||
|
||||
[dependencies.borsh]
|
||||
version = "0.9"
|
||||
version = "0.10.0"
|
||||
optional = true
|
||||
default-features = false
|
||||
|
||||
@ -137,7 +137,7 @@ version = "1.0"
|
||||
default-features = false
|
||||
|
||||
[dev-dependencies.criterion]
|
||||
version = "0.3"
|
||||
version = "0.4.0"
|
||||
default-features = false
|
||||
|
||||
[dev-dependencies.csv]
|
||||
@ -223,6 +223,7 @@ rkyv-safe = [
|
||||
]
|
||||
rocket-traits = ["rocket"]
|
||||
rust-fuzz = ["arbitrary"]
|
||||
serde = ["dep:serde"]
|
||||
serde-arbitrary-precision = ["serde-with-arbitrary-precision"]
|
||||
serde-bincode = ["serde-str"]
|
||||
serde-float = ["serde-with-float"]
|
||||
|
4
third_party/rust/rust_decimal/README.md
vendored
4
third_party/rust/rust_decimal/README.md
vendored
@ -29,8 +29,8 @@ Alternatively, you can edit your `Cargo.toml` directly and run `cargo update`:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
rust_decimal = "1.27"
|
||||
rust_decimal_macros = "1.27"
|
||||
rust_decimal = "1.28"
|
||||
rust_decimal_macros = "1.28"
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
9
third_party/rust/rust_decimal/src/decimal.rs
vendored
9
third_party/rust/rust_decimal/src/decimal.rs
vendored
@ -1770,7 +1770,7 @@ impl_try_from_decimal!(u128, Decimal::to_u128, integer_docs!(true));
|
||||
// See https://github.com/rust-lang/rustfmt/issues/5062 for more information.
|
||||
#[rustfmt::skip]
|
||||
macro_rules! impl_try_from_primitive {
|
||||
($TFrom:ty, $conversion_fn:path) => {
|
||||
($TFrom:ty, $conversion_fn:path $(, $err:expr)?) => {
|
||||
#[doc = concat!(
|
||||
"Try to convert a `",
|
||||
stringify!($TFrom),
|
||||
@ -1781,14 +1781,15 @@ macro_rules! impl_try_from_primitive {
|
||||
|
||||
#[inline]
|
||||
fn try_from(t: $TFrom) -> Result<Self, Error> {
|
||||
$conversion_fn(t).ok_or_else(|| Error::ConversionTo("Decimal".into()))
|
||||
$conversion_fn(t) $( .ok_or_else(|| $err) )?
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
impl_try_from_primitive!(f32, Self::from_f32);
|
||||
impl_try_from_primitive!(f64, Self::from_f64);
|
||||
impl_try_from_primitive!(f32, Self::from_f32, Error::ConversionTo("Decimal".into()));
|
||||
impl_try_from_primitive!(f64, Self::from_f64, Error::ConversionTo("Decimal".into()));
|
||||
impl_try_from_primitive!(&str, core::str::FromStr::from_str);
|
||||
|
||||
macro_rules! impl_from {
|
||||
($T:ty, $from_ty:path) => {
|
||||
|
1
third_party/rust/rust_decimal/src/lib.rs
vendored
1
third_party/rust/rust_decimal/src/lib.rs
vendored
@ -1,5 +1,6 @@
|
||||
#![doc = include_str!(concat!(env!("OUT_DIR"), "/README-lib.md"))]
|
||||
#![forbid(unsafe_code)]
|
||||
#![deny(clippy::print_stdout, clippy::print_stderr)]
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
extern crate alloc;
|
||||
|
||||
|
43
third_party/rust/rust_decimal/src/ops/array.rs
vendored
43
third_party/rust/rust_decimal/src/ops/array.rs
vendored
@ -1,4 +1,4 @@
|
||||
use crate::constants::{POWERS_10, U32_MASK};
|
||||
use crate::constants::{MAX_PRECISION_U32, POWERS_10, U32_MASK};
|
||||
|
||||
/// Rescales the given decimal to new scale.
|
||||
/// e.g. with 1.23 and new scale 3 rescale the value to 1.230
|
||||
@ -10,7 +10,7 @@ pub(crate) fn rescale_internal(value: &mut [u32; 3], value_scale: &mut u32, new_
|
||||
}
|
||||
|
||||
if is_all_zero(value) {
|
||||
*value_scale = new_scale;
|
||||
*value_scale = new_scale.min(MAX_PRECISION_U32);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -299,29 +299,42 @@ mod test {
|
||||
}
|
||||
|
||||
let tests = &[
|
||||
("1", 0, "1"),
|
||||
("1", 1, "1.0"),
|
||||
("1", 5, "1.00000"),
|
||||
("1", 10, "1.0000000000"),
|
||||
("1", 20, "1.00000000000000000000"),
|
||||
("0.6386554621848739495798319328", 27, "0.638655462184873949579831933"),
|
||||
("1", 0, "1", 0),
|
||||
("1", 1, "1.0", 1),
|
||||
("1", 5, "1.00000", 5),
|
||||
("1", 10, "1.0000000000", 10),
|
||||
("1", 20, "1.00000000000000000000", 20),
|
||||
(
|
||||
"843.65000000", // Scale 8
|
||||
25, // 25
|
||||
"843.6500000000000000000000000", // 25
|
||||
"0.6386554621848739495798319328",
|
||||
27,
|
||||
"0.638655462184873949579831933",
|
||||
27,
|
||||
),
|
||||
(
|
||||
"843.65000000", // Scale 8
|
||||
30, // 30
|
||||
"843.6500000000000000000000000000", // 28
|
||||
"843.65000000", // Scale 8
|
||||
25,
|
||||
"843.6500000000000000000000000",
|
||||
25,
|
||||
),
|
||||
(
|
||||
"843.65000000", // Scale 8
|
||||
30,
|
||||
"843.6500000000000000000000000",
|
||||
25, // Only fits 25
|
||||
),
|
||||
("0", 130, "0.000000000000000000000000000000", 28),
|
||||
];
|
||||
|
||||
for &(value_raw, new_scale, expected_value) in tests {
|
||||
for &(value_raw, new_scale, expected_value, expected_scale) in tests {
|
||||
let (expected_value, _) = extract(expected_value);
|
||||
let (mut value, mut value_scale) = extract(value_raw);
|
||||
rescale_internal(&mut value, &mut value_scale, new_scale);
|
||||
assert_eq!(value, expected_value);
|
||||
assert_eq!(
|
||||
value_scale, expected_scale,
|
||||
"value: {}, requested scale: {}",
|
||||
value_raw, new_scale
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -236,6 +236,20 @@ mod test {
|
||||
assert_eq!(None, result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_very_small_numeric_type() {
|
||||
let mut client = match Client::connect(&get_postgres_url(), NoTls) {
|
||||
Ok(x) => x,
|
||||
Err(err) => panic!("{:#?}", err),
|
||||
};
|
||||
let result: Decimal = match client.query("SELECT 1e-130::NUMERIC(130, 0)", &[]) {
|
||||
Ok(x) => x.iter().next().unwrap().get(0),
|
||||
Err(err) => panic!("error - {:#?}", err),
|
||||
};
|
||||
// We compare this to zero since it is so small that it is effectively zero
|
||||
assert_eq!(Decimal::ZERO, result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_numeric_type() {
|
||||
let mut client = match Client::connect(&get_postgres_url(), NoTls) {
|
||||
|
58
third_party/rust/rust_decimal/src/serde.rs
vendored
58
third_party/rust/rust_decimal/src/serde.rs
vendored
@ -259,7 +259,7 @@ pub mod str_option {
|
||||
where
|
||||
D: serde::de::Deserializer<'de>,
|
||||
{
|
||||
deserializer.deserialize_option(OptionDecimalVisitor)
|
||||
deserializer.deserialize_option(OptionDecimalStrVisitor)
|
||||
}
|
||||
|
||||
pub fn serialize<S>(value: &Option<Decimal>, serializer: S) -> Result<S::Ok, S::Error>
|
||||
@ -269,7 +269,7 @@ pub mod str_option {
|
||||
match *value {
|
||||
Some(ref decimal) => {
|
||||
let decimal = crate::str::to_str_internal(decimal, true, None);
|
||||
serializer.serialize_str(decimal.0.as_ref())
|
||||
serializer.serialize_some(decimal.0.as_ref())
|
||||
}
|
||||
None => serializer.serialize_none(),
|
||||
}
|
||||
@ -404,6 +404,32 @@ impl<'de> serde::de::Visitor<'de> for OptionDecimalVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "serde-with-str")]
|
||||
struct OptionDecimalStrVisitor;
|
||||
|
||||
#[cfg(feature = "serde-with-str")]
|
||||
impl<'de> serde::de::Visitor<'de> for OptionDecimalStrVisitor {
|
||||
type Value = Option<Decimal>;
|
||||
|
||||
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
formatter.write_str("a Decimal type representing a fixed-point number")
|
||||
}
|
||||
|
||||
fn visit_none<E>(self) -> Result<Option<Decimal>, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
fn visit_some<D>(self, d: D) -> Result<Option<Decimal>, D::Error>
|
||||
where
|
||||
D: serde::de::Deserializer<'de>,
|
||||
{
|
||||
d.deserialize_str(DecimalVisitor).map(Some)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "serde-with-arbitrary-precision")]
|
||||
struct DecimalKey;
|
||||
|
||||
@ -744,7 +770,7 @@ mod test {
|
||||
use bincode::{deserialize, serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct BincodeExample {
|
||||
struct BincodeExample {
|
||||
#[serde(with = "crate::serde::str")]
|
||||
value: Decimal,
|
||||
}
|
||||
@ -752,6 +778,7 @@ mod test {
|
||||
let data = [
|
||||
("0", "0"),
|
||||
("0.00", "0.00"),
|
||||
("1.234", "1.234"),
|
||||
("3.14159", "3.14159"),
|
||||
("-3.14159", "-3.14159"),
|
||||
("1234567890123.4567890", "1234567890123.4567890"),
|
||||
@ -768,6 +795,31 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(feature = "serde-with-str")]
|
||||
fn with_str_bincode_optional() {
|
||||
use bincode::{deserialize, serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct BincodeExample {
|
||||
#[serde(with = "crate::serde::str_option")]
|
||||
value: Option<Decimal>,
|
||||
}
|
||||
|
||||
// Some(value)
|
||||
let value = Some(Decimal::new(1234, 3));
|
||||
let input = BincodeExample { value };
|
||||
let encoded = serialize(&input).unwrap();
|
||||
let decoded: BincodeExample = deserialize(&encoded[..]).unwrap();
|
||||
assert_eq!(value, decoded.value, "Some(value)");
|
||||
|
||||
// None
|
||||
let input = BincodeExample { value: None };
|
||||
let encoded = serialize(&input).unwrap();
|
||||
let decoded: BincodeExample = deserialize(&encoded[..]).unwrap();
|
||||
assert_eq!(None, decoded.value, "None");
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(feature = "serde-with-str")]
|
||||
fn with_str_optional() {
|
||||
|
@ -2859,6 +2859,12 @@ fn it_converts_from_u128() {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn it_converts_from_str() {
|
||||
assert_eq!(Decimal::try_from("1").unwrap(), Decimal::ONE);
|
||||
assert_eq!(Decimal::try_from("10").unwrap(), Decimal::TEN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn it_converts_from_f32() {
|
||||
use num_traits::FromPrimitive;
|
||||
|
Loading…
x
Reference in New Issue
Block a user