use crate::Decimal;
use serde::de::Visitor;
use serde::{self, Deserialize, Deserializer, Serialize};
use std::fmt;
pub(crate) const TUNNELED_DECIMAL_TYPE_NAME: &str = "$__ion_rs_decimal__";
impl Serialize for Decimal {
#[inline]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
serializer.serialize_newtype_struct(TUNNELED_DECIMAL_TYPE_NAME, self)
}
}
impl<'de> Deserialize<'de> for Decimal {
fn deserialize<D>(deserializer: D) -> Result<Decimal, D::Error>
where
D: Deserializer<'de>,
{
struct DecimalVisitor;
impl Visitor<'_> for DecimalVisitor {
type Value = Decimal;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str("an Ion Decimal")
}
}
deserializer.deserialize_newtype_struct(TUNNELED_DECIMAL_TYPE_NAME, DecimalVisitor)
}
}