Skip to content
This repository was archived by the owner on Aug 15, 2025. It is now read-only.

Commit 639ffca

Browse files
committed
feat: implement Deserialize, Serialize for Uint
1 parent 4f1ef58 commit 639ffca

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

src/types/der/asn1/uint.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,32 @@ impl FromStr for Uint {
119119
#[cfg(feature = "serde")]
120120
mod serde {
121121
use super::*;
122+
use ::serde::de::Visitor;
122123
use ::serde::{Deserialize, Serialize};
123124

125+
struct UintVisitor;
126+
127+
impl<'v> Visitor<'v> for UintVisitor {
128+
type Value = Uint;
129+
130+
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
131+
formatter.write_str("an integer between 0 and 2^1024*1024*256")
132+
}
133+
134+
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
135+
where
136+
E: ::serde::de::Error,
137+
{
138+
Uint::from_str(v).map_err(|e| E::custom(e.to_string()))
139+
}
140+
}
141+
124142
impl<'de> Deserialize<'de> for Uint {
125143
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
126144
where
127145
D: ::serde::Deserializer<'de>,
128146
{
129-
todo!()
147+
deserializer.deserialize_str(UintVisitor)
130148
}
131149
}
132150

@@ -135,7 +153,7 @@ mod serde {
135153
where
136154
S: ::serde::Serializer,
137155
{
138-
todo!()
156+
serializer.serialize_str(self.to_string().as_str())
139157
}
140158
}
141159
}

0 commit comments

Comments
 (0)