bark-json 0.1.0-beta.6

JSON definitions for the bark APIs
Documentation
use serde::{Deserialize, Deserializer, Serializer};

pub mod duration {
	use super::*;

	use std::time::Duration;

	pub fn serialize<S: Serializer>(duration: &Duration, s: S) -> Result<S::Ok, S::Error> {
		s.collect_str(&humantime::format_duration(*duration))
	}

	pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Duration, D::Error> {
		let s = String::deserialize(d)?;
		humantime::parse_duration(&s).map_err(serde::de::Error::custom)
	}
}

#[allow(unused)]
pub mod fee_rate_sats_per_kvb {
	use serde::{Deserialize, Deserializer, Serializer};
	use bitcoin::FeeRate;
	use bitcoin_ext::FeeRateExt;

	pub fn serialize<S>(v: &Option<FeeRate>, s: S) -> Result<S::Ok, S::Error>
	where S: Serializer {
		match v {
			Some(fr) => s.serialize_some(&fr.to_sat_per_kvb()),
			None => s.serialize_none(),
		}
	}

	pub fn deserialize<'de, D>(d: D) -> Result<Option<FeeRate>, D::Error>
	where D: Deserializer<'de> {
		let opt = Option::<u64>::deserialize(d)?;
		Ok(opt.map(FeeRate::from_sat_per_kvb_ceil))
	}
}