Skip to content

Commit 5533d3e

Browse files
committed
Merge rust-bitcoin#4505: units: serde cleanup
9803650 Fix expecting string for amount types (Tobin C. Harding) 3658865 Fix expecting string for fee_rate (Tobin C. Harding) d694049 Simplify fee_rate serde deserialize opt (Tobin C. Harding) 87d6f17 Make serde attribute usage more terse (Tobin C. Harding) Pull request description: Clean up the `serde` stuff for `FeeRate` and `Amount`. This is all pretty trivial. ACKs for top commit: apoelstra: ACK 9803650; successfully ran local tests Tree-SHA512: 70d3b5245f69c87b03ed2259bb6eefc93d075c6246f1fae3e4cc14934f41bbcf6cb6d69b3a3986b3b382bb00f3457a2f7be91e8b805823db4f802a086f2f27e4
2 parents 4e094d6 + 9803650 commit 5533d3e

File tree

3 files changed

+35
-44
lines changed

3 files changed

+35
-44
lines changed

units/src/amount/serde.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
//!
1414
//! ```
1515
//! use serde::{Serialize, Deserialize};
16-
//! use bitcoin_units::Amount;
16+
//! use bitcoin_units::{amount, Amount};
1717
//!
1818
//! #[derive(Serialize, Deserialize)]
1919
//! pub struct HasAmount {
20-
//! #[serde(with = "bitcoin_units::amount::serde::as_sat")]
20+
//! #[serde(with = "amount::serde::as_sat")]
2121
//! pub amount: Amount,
2222
//! }
2323
//! ```
@@ -230,7 +230,7 @@ pub mod as_sat {
230230
type Value = Option<X>;
231231

232232
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
233-
write!(formatter, "An Option<{}64>", X::type_prefix(private::Token))
233+
write!(formatter, "an Option<{}64>", X::type_prefix(private::Token))
234234
}
235235

236236
fn visit_none<E>(self) -> Result<Self::Value, E>
@@ -301,7 +301,7 @@ pub mod as_btc {
301301
type Value = Option<X>;
302302

303303
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
304-
write!(formatter, "An Option<f64>")
304+
write!(formatter, "an Option<f64>")
305305
}
306306

307307
fn visit_none<E>(self) -> Result<Self::Value, E>
@@ -372,7 +372,7 @@ pub mod as_str {
372372
type Value = Option<X>;
373373

374374
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
375-
write!(formatter, "An Option<String>")
375+
write!(formatter, "an Option<String>")
376376
}
377377

378378
fn visit_none<E>(self) -> Result<Self::Value, E>
@@ -396,6 +396,7 @@ pub mod as_str {
396396
#[cfg(test)]
397397
mod tests {
398398
use super::*;
399+
use crate::amount;
399400

400401
#[test]
401402
fn sanity_check() {
@@ -407,7 +408,7 @@ mod tests {
407408
fn can_serde_as_sat() {
408409
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
409410
pub struct HasAmount {
410-
#[serde(with = "crate::amount::serde::as_sat")]
411+
#[serde(with = "amount::serde::as_sat")]
411412
pub amount: Amount,
412413
}
413414

@@ -426,7 +427,7 @@ mod tests {
426427
fn can_serde_as_btc() {
427428
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
428429
pub struct HasAmount {
429-
#[serde(with = "crate::amount::serde::as_btc")]
430+
#[serde(with = "amount::serde::as_btc")]
430431
pub amount: Amount,
431432
}
432433

@@ -445,7 +446,7 @@ mod tests {
445446
fn can_serde_as_str() {
446447
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
447448
pub struct HasAmount {
448-
#[serde(with = "crate::amount::serde::as_str")]
449+
#[serde(with = "amount::serde::as_str")]
449450
pub amount: Amount,
450451
}
451452

units/src/fee_rate/serde.rs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
//!
1515
//! ```
1616
//! use serde::{Serialize, Deserialize};
17-
//! use bitcoin_units::FeeRate;
17+
//! use bitcoin_units::{fee_rate, FeeRate};
1818
//!
1919
//! #[derive(Serialize, Deserialize)]
2020
//! pub struct Foo {
21-
//! #[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_kwu")]
21+
//! #[serde(with = "fee_rate::serde::as_sat_per_kwu")]
2222
//! pub fee_rate: FeeRate,
2323
//! }
2424
//! ```
@@ -50,7 +50,7 @@ pub mod as_sat_per_kwu {
5050
5151
use core::fmt;
5252

53-
use serde::{de, Deserialize, Deserializer, Serializer};
53+
use serde::{de, Deserializer, Serializer};
5454

5555
use crate::FeeRate;
5656

@@ -69,7 +69,7 @@ pub mod as_sat_per_kwu {
6969
type Value = Option<FeeRate>;
7070

7171
fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
72-
write!(f, "An Option<FeeRate>")
72+
write!(f, "an Option<u64>")
7373
}
7474

7575
fn visit_none<E>(self) -> Result<Self::Value, E>
@@ -83,7 +83,7 @@ pub mod as_sat_per_kwu {
8383
where
8484
D: Deserializer<'de>,
8585
{
86-
Ok(Some(FeeRate::from_sat_per_kwu(u64::deserialize(d)?)))
86+
Ok(Some(super::deserialize(d)?))
8787
}
8888
}
8989
d.deserialize_option(VisitOpt)
@@ -121,9 +121,8 @@ pub mod as_sat_per_vb_floor {
121121
122122
use core::fmt;
123123

124-
use serde::{de, Deserialize, Deserializer, Serializer};
124+
use serde::{de, Deserializer, Serializer};
125125

126-
use crate::fee_rate::serde::OverflowError;
127126
use crate::fee_rate::FeeRate;
128127

129128
#[allow(clippy::ref_option)] // API forced by serde.
@@ -141,7 +140,7 @@ pub mod as_sat_per_vb_floor {
141140
type Value = Option<FeeRate>;
142141

143142
fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
144-
write!(f, "An Option<FeeRate>")
143+
write!(f, "an Option<u64>")
145144
}
146145

147146
fn visit_none<E>(self) -> Result<Self::Value, E>
@@ -155,11 +154,7 @@ pub mod as_sat_per_vb_floor {
155154
where
156155
D: Deserializer<'de>,
157156
{
158-
Ok(Some(
159-
FeeRate::from_sat_per_vb(u64::deserialize(d)?)
160-
.ok_or(OverflowError)
161-
.map_err(serde::de::Error::custom)?,
162-
))
157+
Ok(Some(super::deserialize(d)?))
163158
}
164159
}
165160
d.deserialize_option(VisitOpt)
@@ -197,9 +192,8 @@ pub mod as_sat_per_vb_ceil {
197192
198193
use core::fmt;
199194

200-
use serde::{de, Deserialize, Deserializer, Serializer};
195+
use serde::{de, Deserializer, Serializer};
201196

202-
use crate::fee_rate::serde::OverflowError;
203197
use crate::fee_rate::FeeRate;
204198

205199
#[allow(clippy::ref_option)] // API forced by serde.
@@ -217,7 +211,7 @@ pub mod as_sat_per_vb_ceil {
217211
type Value = Option<FeeRate>;
218212

219213
fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
220-
write!(f, "An Option<FeeRate>")
214+
write!(f, "an Option<u64>")
221215
}
222216

223217
fn visit_none<E>(self) -> Result<Self::Value, E>
@@ -231,11 +225,7 @@ pub mod as_sat_per_vb_ceil {
231225
where
232226
D: Deserializer<'de>,
233227
{
234-
Ok(Some(
235-
FeeRate::from_sat_per_vb(u64::deserialize(d)?)
236-
.ok_or(OverflowError)
237-
.map_err(serde::de::Error::custom)?,
238-
))
228+
Ok(Some(super::deserialize(d)?))
239229
}
240230
}
241231
d.deserialize_option(VisitOpt)

units/tests/serde.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,41 @@
77

88
use bincode::serialize;
99
use bitcoin_units::locktime::{absolute, relative};
10-
use bitcoin_units::{Amount, BlockHeight, BlockInterval, FeeRate, SignedAmount, Weight};
10+
use bitcoin_units::{amount, fee_rate, Amount, BlockHeight, BlockInterval, FeeRate, SignedAmount, Weight};
1111
use serde::{Deserialize, Serialize};
1212

1313
/// A struct that includes all the types that implement or support `serde` traits.
1414
#[derive(Debug, Serialize, Deserialize)]
1515
struct Serde {
16-
#[serde(with = "bitcoin_units::amount::serde::as_sat")]
16+
#[serde(with = "amount::serde::as_sat")]
1717
unsigned_as_sat: Amount,
18-
#[serde(with = "bitcoin_units::amount::serde::as_btc")]
18+
#[serde(with = "amount::serde::as_btc")]
1919
unsigned_as_btc: Amount,
20-
#[serde(with = "bitcoin_units::amount::serde::as_sat::opt")]
20+
#[serde(with = "amount::serde::as_sat::opt")]
2121
unsigned_opt_as_sat: Option<Amount>,
22-
#[serde(with = "bitcoin_units::amount::serde::as_btc::opt")]
22+
#[serde(with = "amount::serde::as_btc::opt")]
2323
unsigned_opt_as_btc: Option<Amount>,
2424

25-
#[serde(with = "bitcoin_units::amount::serde::as_sat")]
25+
#[serde(with = "amount::serde::as_sat")]
2626
signed_as_sat: SignedAmount,
27-
#[serde(with = "bitcoin_units::amount::serde::as_btc")]
27+
#[serde(with = "amount::serde::as_btc")]
2828
signed_as_btc: SignedAmount,
29-
#[serde(with = "bitcoin_units::amount::serde::as_sat::opt")]
29+
#[serde(with = "amount::serde::as_sat::opt")]
3030
signed_opt_as_sat: Option<SignedAmount>,
31-
#[serde(with = "bitcoin_units::amount::serde::as_btc::opt")]
31+
#[serde(with = "amount::serde::as_btc::opt")]
3232
signed_opt_as_btc: Option<SignedAmount>,
3333

34-
#[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_vb_floor")]
34+
#[serde(with = "fee_rate::serde::as_sat_per_vb_floor")]
3535
vb_floor: FeeRate,
36-
#[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_vb_ceil")]
36+
#[serde(with = "fee_rate::serde::as_sat_per_vb_ceil")]
3737
vb_ceil: FeeRate,
38-
#[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_kwu")]
38+
#[serde(with = "fee_rate::serde::as_sat_per_kwu")]
3939
kwu: FeeRate,
40-
#[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_vb_floor::opt")]
40+
#[serde(with = "fee_rate::serde::as_sat_per_vb_floor::opt")]
4141
opt_vb_floor: Option<FeeRate>,
42-
#[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_vb_ceil::opt")]
42+
#[serde(with = "fee_rate::serde::as_sat_per_vb_ceil::opt")]
4343
opt_vb_ceil: Option<FeeRate>,
44-
#[serde(with = "bitcoin_units::fee_rate::serde::as_sat_per_kwu::opt")]
44+
#[serde(with = "fee_rate::serde::as_sat_per_kwu::opt")]
4545
opt_kwu: Option<FeeRate>,
4646

4747
a: BlockHeight,

0 commit comments

Comments
 (0)