use std::convert::TryFrom;
use crate::chain::token::TokenAmount;
#[cfg(feature = "json")]
#[serde_with::serde_as]
#[derive(serde::Serialize, serde::Deserialize)]
pub(crate) struct TokenAmountJson(
#[serde_as(as = "serde_with::PickFirst<(_, serde_with::DisplayFromStr)>")] serde_json::Number,
);
impl TryFrom<TokenAmountJson> for TokenAmount {
type Error = String;
fn try_from(value: TokenAmountJson) -> Result<Self, Self::Error> {
if let Some(n) = value.0.as_u64() {
Ok(TokenAmount(n))
} else {
Err(String::from(
"can't convert `TokenAmountJson` into `TokenAmount`",
))
}
}
}
impl From<TokenAmount> for TokenAmountJson {
fn from(value: TokenAmount) -> Self {
TokenAmountJson(serde_json::Number::from(value.0))
}
}