|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
use serde::{Deserializer, Deserialize};
|
|
|
|
|
use serde_json::Value;
|
|
|
|
|
use codes_iso_639::{part_2::LanguageCode, LanguageCodeError};
|
|
|
|
|
use serde::{Deserialize, Deserializer};
|
|
|
|
|
use serde_json::Value;
|
|
|
|
|
use std::str::FromStr;
|
|
|
|
|
|
|
|
|
|
pub fn nullable_list<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
|
|
|
|
@ -16,7 +16,7 @@ where
|
|
|
|
|
Ok(Vec::new())
|
|
|
|
|
} else {
|
|
|
|
|
// Otherwise, try to deserialize the value as a Vec<String>
|
|
|
|
|
<Vec::<T> as serde::Deserialize>::deserialize(value).map_err(serde::de::Error::custom)
|
|
|
|
|
<Vec<T> as serde::Deserialize>::deserialize(value).map_err(serde::de::Error::custom)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -28,7 +28,7 @@ where
|
|
|
|
|
let value: Value = Deserialize::deserialize(deserializer)?;
|
|
|
|
|
|
|
|
|
|
if !value.is_string() {
|
|
|
|
|
return Err(serde::de::Error::custom("Not a string"))
|
|
|
|
|
return Err(serde::de::Error::custom("Not a string"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let value = value.as_str().unwrap();
|
|
|
|
@ -36,7 +36,11 @@ where
|
|
|
|
|
Ok(match value {
|
|
|
|
|
"y" => true,
|
|
|
|
|
"" => false,
|
|
|
|
|
_ => return Err(serde::de::Error::custom("Invalid Wasei value, must be \"y\" or \"\""))
|
|
|
|
|
_ => {
|
|
|
|
|
return Err(serde::de::Error::custom(
|
|
|
|
|
"Invalid Wasei value, must be \"y\" or \"\"",
|
|
|
|
|
))
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -46,7 +50,7 @@ fn parse_language_code(code_str: &str) -> Result<LanguageCode, LanguageCodeError
|
|
|
|
|
"mol" => LanguageCode::Ron,
|
|
|
|
|
// Croatian
|
|
|
|
|
"scr" => LanguageCode::Hrv,
|
|
|
|
|
_ => return LanguageCode::from_str(code_str)
|
|
|
|
|
_ => return LanguageCode::from_str(code_str),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -56,7 +60,9 @@ where
|
|
|
|
|
{
|
|
|
|
|
lang_option(deserializer)
|
|
|
|
|
.transpose()
|
|
|
|
|
.unwrap_or(Err(serde::de::Error::custom("Expected language code, found null!")))
|
|
|
|
|
.unwrap_or(Err(serde::de::Error::custom(
|
|
|
|
|
"Expected language code, found null!",
|
|
|
|
|
)))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn lang_default_eng<'de, D>(deserializer: D) -> Result<LanguageCode, D::Error>
|
|
|
|
@ -87,4 +93,4 @@ where
|
|
|
|
|
Value::String(str) if str.is_empty() => Ok(serde::de::IgnoredAny),
|
|
|
|
|
_ => Err(serde::de::Error::custom("Expected null or empty string!")),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|