use serde::{Deserializer, de::Visitor};
pub fn version_deserialize<'de, D>(deserializer: D) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
struct VersionVisitor;
impl<'de> Visitor<'de> for VersionVisitor {
type Value = String;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
formatter.write_str(r#"jsonrpc version MUST be "2.0""#)
}
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
match v {
"2.0" => Ok(v.to_string()),
_ => Err(E::custom(format!("jsonrpc version NOT 2.0: {v}"))),
}
}
}
deserializer.deserialize_string(VersionVisitor)
}