jsonrpc_types/v2/
version.rs1use std::fmt;
2
3use serde::{de, ser};
4
5#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
7pub enum Version {
8 V2_0,
10}
11
12impl ser::Serialize for Version {
13 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
14 where
15 S: ser::Serializer,
16 {
17 match self {
18 Version::V2_0 => serializer.serialize_str("2.0"),
19 }
20 }
21}
22
23impl<'a> de::Deserialize<'a> for Version {
24 fn deserialize<D>(deserializer: D) -> Result<Version, D::Error>
25 where
26 D: de::Deserializer<'a>,
27 {
28 deserializer.deserialize_identifier(VersionVisitor)
29 }
30}
31
32struct VersionVisitor;
33impl<'a> de::Visitor<'a> for VersionVisitor {
34 type Value = Version;
35
36 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
37 formatter.write_str("a string")
38 }
39
40 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
41 where
42 E: de::Error,
43 {
44 match value {
45 "2.0" => Ok(Version::V2_0),
46 _ => Err(de::Error::custom("Invalid JSON-RPC protocol version")),
47 }
48 }
49}