wip: add deserialize for Digeset

This commit is contained in:
Tomáš Mládek 2023-06-28 21:20:42 +02:00
parent d077726894
commit 9a2af86238

View file

@ -1,6 +1,11 @@
use std::fmt;
use crate::{addressing::Address, error::UpEndError};
use multihash::Hasher;
use serde::{ser, Serialize, Serializer};
use serde::{
de::{self, Visitor},
ser, Deserialize, Deserializer, Serialize, Serializer,
};
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
#[cfg_attr(feature = "diesel", derive(diesel::FromSqlRow))]
@ -29,6 +34,34 @@ impl Serialize for Digest {
}
}
struct DigestVisitor;
impl<'de> Visitor<'de> for DigestVisitor {
type Value = Digest;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("a valid UpEnd address (hash/UUID) as a multi-hashed string")
}
fn visit_str<E>(self, str: &str) -> Result<Self::Value, E>
where
E: de::Error,
{
b58_decode(str)
.map(|v| Digest(v))
.map_err(|e| de::Error::custom(format!("Error deserializing digest: {}", e)))
}
}
impl<'de> Deserialize<'de> for Digest {
fn deserialize<D>(deserializer: D) -> Result<Digest, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_str(DigestVisitor)
}
}
#[cfg(feature = "diesel")]
impl diesel::types::FromSql<diesel::sql_types::Binary, diesel::sqlite::Sqlite> for Digest {
fn from_sql(