generated from ElnuDev/rust-project
Improve ignored field handling, remove testing schema
This commit is contained in:
parent
30ee7577eb
commit
2f54f16864
2 changed files with 11 additions and 15 deletions
|
@ -22,7 +22,9 @@ pub struct JmdictEntry {
|
|||
#[derive(Deserialize)]
|
||||
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
|
||||
pub struct JmdictExample {
|
||||
pub srce: JmdictExampleSource,
|
||||
// Always empty with latest version of JMdict
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_blank")]
|
||||
srcaswdfa: serde::de::IgnoredAny,
|
||||
pub sentences: Vec<JmdictExampleSentence>,
|
||||
}
|
||||
|
||||
|
@ -34,13 +36,6 @@ pub struct JmdictExampleSentence {
|
|||
pub text: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
|
||||
pub struct JmdictExampleSource {
|
||||
pub id: String,
|
||||
pub src_type: JmdictExampleSourceSrcType,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
|
||||
pub enum JmdictExampleSourceSrcType {
|
||||
|
@ -54,7 +49,7 @@ pub struct JmdictGlossary {
|
|||
#[serde(deserialize_with = "lang_default_eng")]
|
||||
pub language: LanguageCode,
|
||||
// Always empty with latest version of JMdict
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_null")]
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_blank")]
|
||||
gender: serde::de::IgnoredAny,
|
||||
pub r#type: Option<JmdictGlossaryType>,
|
||||
}
|
||||
|
@ -87,7 +82,7 @@ pub struct JmdictKanji {
|
|||
pub struct JmdictReading {
|
||||
pub reading: String,
|
||||
// Always empty with latest version of JMdict
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_null")]
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_blank")]
|
||||
no_kanji: serde::de::IgnoredAny,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub restrictions: Vec<String>,
|
||||
|
|
|
@ -84,13 +84,14 @@ where
|
|||
.map_err(|err| serde::de::Error::custom(err))
|
||||
}
|
||||
|
||||
pub fn err_if_not_null<'de, D>(deserializer: D) -> Result<serde::de::IgnoredAny, D::Error>
|
||||
pub fn err_if_not_blank<'de, D>(deserializer: D) -> Result<serde::de::IgnoredAny, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
match serde_json::Value::deserialize(deserializer)? {
|
||||
Value::Null => Ok(serde::de::IgnoredAny),
|
||||
Value::String(str) if str.is_empty() => Ok(serde::de::IgnoredAny),
|
||||
_ => Err(serde::de::Error::custom("Expected null or empty string!")),
|
||||
let value = serde_json::Value::deserialize(deserializer)?;
|
||||
if value.is_null() || value == "" {
|
||||
Ok(serde::de::IgnoredAny)
|
||||
} else {
|
||||
Err(serde::de::Error::custom("Expected null or empty string!"))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue