wip: add deserialize for Digeset
This commit is contained in:
parent
d077726894
commit
9a2af86238
1 changed files with 34 additions and 1 deletions
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue