From c2b2147e0483cafa07a3bbd0dc81fbb9c5ccb2b6 Mon Sep 17 00:00:00 2001 From: ElnuDev Date: Thu, 27 Jul 2023 22:01:57 -0700 Subject: [PATCH] Early broken bincode implementation --- Cargo.lock | 11 +++++++++++ jmdict/.gitignore | 1 + jmdict/Cargo.toml | 2 +- jmdict/src/models/jmdict.rs | 24 ++++++++++++------------ jmdict/src/tests.rs | 28 ++++++++++++++++++++++------ 5 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 jmdict/.gitignore diff --git a/Cargo.lock b/Cargo.lock index 543880c..9c1dc73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,6 +32,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -136,6 +145,7 @@ dependencies = [ "codes-agency", "codes-common", "csv", + "serde", "tera", ] @@ -315,6 +325,7 @@ version = "0.1.0" name = "jichanorg-jmdict" version = "0.1.0" dependencies = [ + "bincode", "codes-iso-639", "serde", "serde_json", diff --git a/jmdict/.gitignore b/jmdict/.gitignore new file mode 100644 index 0000000..bbfc335 --- /dev/null +++ b/jmdict/.gitignore @@ -0,0 +1 @@ +JMdict*.bin \ No newline at end of file diff --git a/jmdict/Cargo.toml b/jmdict/Cargo.toml index 45af8ec..1be4fd0 100644 --- a/jmdict/Cargo.toml +++ b/jmdict/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +bincode = "1.3.3" serde = { version = "1.0.175", features = ["serde_derive"] } serde_json = "1.0.103" @@ -13,5 +14,4 @@ serde_json = "1.0.103" git = "https://github.com/ElnuDev/rust-codes.git" rev = "bea9e74d0ec2aaec0b74c2fa6f8da0490a638090" version = "0.1.5" -default-features = false # no serde features = ["part_2"] diff --git a/jmdict/src/models/jmdict.rs b/jmdict/src/models/jmdict.rs index f63337d..d8decc1 100644 --- a/jmdict/src/models/jmdict.rs +++ b/jmdict/src/models/jmdict.rs @@ -1,15 +1,15 @@ use codes_iso_639::part_2::LanguageCode; -use serde::Deserialize; +use serde::{Serialize, Deserialize}; use crate::serial::*; -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct Jmdict { pub entries: Vec, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictEntry { pub sequence: i32, @@ -19,7 +19,7 @@ pub struct JmdictEntry { pub sense: Vec, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictExample { // Always empty with latest version of JMdict @@ -28,7 +28,7 @@ pub struct JmdictExample { pub sentences: Vec, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictExampleSentence { #[serde(deserialize_with = "lang")] @@ -36,13 +36,13 @@ pub struct JmdictExampleSentence { pub text: String, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub enum JmdictExampleSourceSrcType { Amogus, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictGlossary { pub content: String, @@ -55,7 +55,7 @@ pub struct JmdictGlossary { } // https://github.com/FooSoft/yomichan/issues/2057 -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] pub enum JmdictGlossaryType { #[serde(rename = "lit")] Literal, @@ -67,7 +67,7 @@ pub enum JmdictGlossaryType { Trademark, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictKanji { pub expression: String, @@ -77,7 +77,7 @@ pub struct JmdictKanji { pub priorities: Vec, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictReading { pub reading: String, @@ -92,7 +92,7 @@ pub struct JmdictReading { pub priorities: Vec, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictSense { #[serde(deserialize_with = "nullable_list")] @@ -121,7 +121,7 @@ pub struct JmdictSense { pub examples: Vec, } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] pub struct JmdictSource { pub content: String, diff --git a/jmdict/src/tests.rs b/jmdict/src/tests.rs index 8986015..b3e30e0 100644 --- a/jmdict/src/tests.rs +++ b/jmdict/src/tests.rs @@ -1,10 +1,9 @@ -use std::fs; +use std::{fs::{self, File}, io::{Write, Read}}; use crate::jmdict::Jmdict; -#[test] -fn jmdict() { - let contents = fs::read_dir("loader") +fn get_jmdict_json() -> String { + fs::read_dir("loader") .unwrap() .filter_map(|file| { let file = file.unwrap(); @@ -16,6 +15,23 @@ fn jmdict() { }) .next() .unwrap() - .unwrap(); - let _jmdict: Jmdict = serde_json::from_str(&contents).unwrap(); + .unwrap() +} + +const BIN_PATH: &str = "JMdict.bin"; + +#[test] +fn jmdict_load_and_serialize() { + let jmdict: Jmdict = serde_json::from_str(&get_jmdict_json()).unwrap(); + let encoded: Vec = bincode::serialize(&jmdict).unwrap(); + let mut file = File::create(BIN_PATH).unwrap(); + file.write_all(&encoded).unwrap(); +} + +#[test] +fn jmdict_deserialize() { + let mut file = File::open(BIN_PATH).unwrap(); + let mut buffer = Vec::new(); + file.read_to_end(&mut buffer).unwrap(); + let _jmdict: Jmdict = bincode::deserialize(&buffer).unwrap(); }