bitcoind_json_rpc_types/
lib.rs1pub extern crate bitcoin;
7
8pub mod v17;
12pub mod v18;
13pub mod v19;
14pub mod v20;
15pub mod v21;
16pub mod v22;
17pub mod v23;
18pub mod v24;
19pub mod v25;
20pub mod v26;
21pub mod v27;
22pub mod v28;
23
24pub mod model;
26
27use std::fmt;
28
29use bitcoin::amount::ParseAmountError;
30use bitcoin::{Amount, FeeRate};
31
32pub fn to_u32(value: i64, field: &str) -> Result<u32, NumericError> {
44 if value.is_negative() {
45 return Err(NumericError::Negative { value, field: field.to_owned() });
46 }
47 u32::try_from(value).map_err(|_| NumericError::Overflow { value, field: field.to_owned() })
48}
49
50#[derive(Debug)]
56pub enum NumericError {
57 Negative { field: String, value: i64 },
59 Overflow { field: String, value: i64 },
61}
62
63impl fmt::Display for NumericError {
64 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
65 use NumericError::*;
66
67 match *self {
68 Negative{ ref field, value } => write!(f, "expected an unsigned numeric value however the value was negative (field name: {} value: {})", field, value),
69 Overflow { ref field, value } => write!(f, "a value larger than `u32::MAX` was unexpectedly encountered (field name: {} Value: {})", field, value),
70 }
71 }
72}
73
74impl std::error::Error for NumericError {}
75
76fn btc_per_kb(btc_per_kb: f64) -> Result<Option<FeeRate>, ParseAmountError> {
78 let btc_per_byte = btc_per_kb / 1000_f64;
79 let sats_per_byte = Amount::from_btc(btc_per_byte)?;
80
81 let rate = FeeRate::from_sat_per_vb(sats_per_byte.to_sat());
83
84 Ok(rate)
85}