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 crate::{addressing::Address, error::UpEndError};
|
||||||
use multihash::Hasher;
|
use multihash::Hasher;
|
||||||
use serde::{ser, Serialize, Serializer};
|
use serde::{
|
||||||
|
de::{self, Visitor},
|
||||||
|
ser, Deserialize, Deserializer, Serialize, Serializer,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||||
#[cfg_attr(feature = "diesel", derive(diesel::FromSqlRow))]
|
#[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")]
|
#[cfg(feature = "diesel")]
|
||||||
impl diesel::types::FromSql<diesel::sql_types::Binary, diesel::sqlite::Sqlite> for Digest {
|
impl diesel::types::FromSql<diesel::sql_types::Binary, diesel::sqlite::Sqlite> for Digest {
|
||||||
fn from_sql(
|
fn from_sql(
|
||||||
|
|
Loading…
Reference in a new issue