generated from ElnuDev/rust-project
Improve serialization file size by switching Vec<T> to Option<Vec<T>>
This commit is contained in:
parent
3a8d77ff1f
commit
0d515cdeb2
2 changed files with 17 additions and 55 deletions
|
@ -13,8 +13,7 @@ pub struct Jmdict {
|
|||
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
|
||||
pub struct JmdictEntry {
|
||||
pub sequence: i32,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub kanji: Vec<JmdictKanji>,
|
||||
pub kanji: Option<Vec<JmdictKanji>>,
|
||||
pub readings: Vec<JmdictReading>,
|
||||
pub sense: Vec<JmdictSense>,
|
||||
}
|
||||
|
@ -48,10 +47,8 @@ pub enum JmdictGlossaryType {
|
|||
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
|
||||
pub struct JmdictKanji {
|
||||
pub expression: String,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub information: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub priorities: Vec<String>,
|
||||
pub information: Option<Vec<String>>,
|
||||
pub priorities: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
|
@ -61,39 +58,25 @@ pub struct JmdictReading {
|
|||
// Always empty with latest version of JMdict
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_blank")]
|
||||
no_kanji: serde::de::IgnoredAny,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub restrictions: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub information: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub priorities: Vec<String>,
|
||||
pub restrictions: Option<Vec<String>>,
|
||||
pub information: Option<Vec<String>>,
|
||||
pub priorities: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
|
||||
pub struct JmdictSense {
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub restricted_kanji: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub restricted_readings: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub references: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub antonyms: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub parts_of_speech: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub fields: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub misc: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub source_languages: Vec<JmdictSource>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub dialects: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub information: Vec<String>,
|
||||
#[serde(deserialize_with = "nullable_list")]
|
||||
pub glossary: Vec<JmdictGlossary>,
|
||||
pub restricted_kanji: Option<Vec<String>>,
|
||||
pub restricted_readings: Option<Vec<String>>,
|
||||
pub references: Option<Vec<String>>,
|
||||
pub antonyms: Option<Vec<String>>,
|
||||
pub parts_of_speech: Option<Vec<String>>,
|
||||
pub fields: Option<Vec<String>>,
|
||||
pub misc: Option<Vec<String>>,
|
||||
pub source_languages: Option<Vec<JmdictSource>>,
|
||||
pub dialects: Option<Vec<String>>,
|
||||
pub information: Option<Vec<String>>,
|
||||
pub glossary: Option<Vec<JmdictGlossary>>,
|
||||
// Always empty with latest version of JMdict
|
||||
#[serde(default, skip_serializing, deserialize_with = "err_if_not_blank")]
|
||||
examples: serde::de::IgnoredAny,
|
||||
|
|
|
@ -3,27 +3,6 @@ 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>
|
||||
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)?;
|
||||
|
||||
// Check if the value is null and return an empty vector in that case
|
||||
if value.is_null() {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn wasei<'de, D>(deserializer: D) -> Result<bool, D::Error>
|
||||
where
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue