From 0d515cdeb280ec6ff0f2e49fa6320ffe723adc83 Mon Sep 17 00:00:00 2001 From: ElnuDev Date: Fri, 28 Jul 2023 11:07:53 -0700 Subject: [PATCH] Improve serialization file size by switching Vec to Option> --- jmdict/src/models/jmdict.rs | 51 +++++++++++++------------------------ jmdict/src/serial.rs | 21 --------------- 2 files changed, 17 insertions(+), 55 deletions(-) diff --git a/jmdict/src/models/jmdict.rs b/jmdict/src/models/jmdict.rs index 6e9be19..924cbbb 100644 --- a/jmdict/src/models/jmdict.rs +++ b/jmdict/src/models/jmdict.rs @@ -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, + pub kanji: Option>, pub readings: Vec, pub sense: Vec, } @@ -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, - #[serde(deserialize_with = "nullable_list")] - pub priorities: Vec, + pub information: Option>, + pub priorities: Option>, } #[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, - #[serde(deserialize_with = "nullable_list")] - pub information: Vec, - #[serde(deserialize_with = "nullable_list")] - pub priorities: Vec, + pub restrictions: Option>, + pub information: Option>, + pub priorities: Option>, } #[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictSense { - #[serde(deserialize_with = "nullable_list")] - pub restricted_kanji: Vec, - #[serde(deserialize_with = "nullable_list")] - pub restricted_readings: Vec, - #[serde(deserialize_with = "nullable_list")] - pub references: Vec, - #[serde(deserialize_with = "nullable_list")] - pub antonyms: Vec, - #[serde(deserialize_with = "nullable_list")] - pub parts_of_speech: Vec, - #[serde(deserialize_with = "nullable_list")] - pub fields: Vec, - #[serde(deserialize_with = "nullable_list")] - pub misc: Vec, - #[serde(deserialize_with = "nullable_list")] - pub source_languages: Vec, - #[serde(deserialize_with = "nullable_list")] - pub dialects: Vec, - #[serde(deserialize_with = "nullable_list")] - pub information: Vec, - #[serde(deserialize_with = "nullable_list")] - pub glossary: Vec, + pub restricted_kanji: Option>, + pub restricted_readings: Option>, + pub references: Option>, + pub antonyms: Option>, + pub parts_of_speech: Option>, + pub fields: Option>, + pub misc: Option>, + pub source_languages: Option>, + pub dialects: Option>, + pub information: Option>, + pub glossary: Option>, // Always empty with latest version of JMdict #[serde(default, skip_serializing, deserialize_with = "err_if_not_blank")] examples: serde::de::IgnoredAny, diff --git a/jmdict/src/serial.rs b/jmdict/src/serial.rs index 30d2342..0547965 100644 --- a/jmdict/src/serial.rs +++ b/jmdict/src/serial.rs @@ -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, D::Error> -where - D: Deserializer<'de>, - T: Deserialize<'de>, -{ - if !deserializer.is_human_readable() { - // bincode, will have already been serialized as Vec - 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 - as serde::Deserialize>::deserialize(value).map_err(serde::de::Error::custom) - } -} pub fn wasei<'de, D>(deserializer: D) -> Result where