1use std::fmt::{Debug, Display};
2
3use serde::{Deserialize, Serialize};
4
5pub type Record<V> = std::collections::HashMap<String, V>;
6
7pub type AnyJson = serde_json::Value;
8
9#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
10pub enum X402Version {
11 V1,
12}
13
14impl Serialize for X402Version {
15 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
16 where
17 S: serde::Serializer,
18 {
19 match self {
20 X402Version::V1 => serializer.serialize_i8(1),
21 }
22 }
23}
24
25impl<'de> Deserialize<'de> for X402Version {
26 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
27 where
28 D: serde::Deserializer<'de>,
29 {
30 let v = i8::deserialize(deserializer)?;
31 match v {
32 1 => Ok(X402Version::V1),
33 _ => Err(serde::de::Error::custom(format!(
34 "Unknown X402 version: {}",
35 v
36 ))),
37 }
38 }
39}
40
41impl Display for X402Version {
42 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43 match self {
44 X402Version::V1 => write!(f, "1"),
45 }
46 }
47}