Get deserialization from bincode working

main
Elnu 10 months ago
parent 9cdf67e90d
commit 3a8d77ff1f

@ -8,6 +8,11 @@ where
D: Deserializer<'de>,
T: Deserialize<'de>,
{
if !deserializer.is_human_readable() {
// bincode, will have already been serialized as Vec<T>
return Ok(Deserialize::deserialize(deserializer)?);
}
// Deserialize the JSON value using Serde's Value type
let value: Value = Deserialize::deserialize(deserializer)?;
@ -24,6 +29,11 @@ pub fn wasei<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
if !deserializer.is_human_readable() {
// bincode, will have already been serialized as bool
return Ok(Deserialize::deserialize(deserializer)?);
}
// Deserialize the JSON value using Serde's Value type
let value: Value = Deserialize::deserialize(deserializer)?;
@ -58,6 +68,11 @@ pub fn lang_default_eng<'de, D>(deserializer: D) -> Result<LanguageCode, D::Erro
where
D: Deserializer<'de>,
{
if !deserializer.is_human_readable() {
// bincode, will have already been serialized as LanguageCode
return Ok(Deserialize::deserialize(deserializer)?);
}
lang_option(deserializer)
.transpose()
.unwrap_or(Ok(LanguageCode::Eng))
@ -67,6 +82,11 @@ pub fn lang_option<'de, D>(deserializer: D) -> Result<Option<LanguageCode>, D::E
where
D: Deserializer<'de>,
{
if !deserializer.is_human_readable() {
// bincode, will have already been serialized as Option<LanguageCode>
return Ok(Deserialize::deserialize(deserializer)?);
}
Option::deserialize(deserializer)?
.map(|str: String| parse_language_code(&str))
.transpose()
@ -77,6 +97,11 @@ pub fn err_if_not_blank<'de, D>(deserializer: D) -> Result<serde::de::IgnoredAny
where
D: Deserializer<'de>,
{
if !deserializer.is_human_readable() {
// bincode, will have already been "serialized" as serde::de::IgnoredAny
return Ok(serde::de::IgnoredAny);
}
let value = serde_json::Value::deserialize(deserializer)?;
if value.is_null() || value == "" {
Ok(serde::de::IgnoredAny)

Loading…
Cancel
Save