Early broken bincode implementation

main
Elnu 10 months ago
parent 2f54f16864
commit c2b2147e04

11
Cargo.lock generated

@ -32,6 +32,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.3.2" version = "1.3.2"
@ -136,6 +145,7 @@ dependencies = [
"codes-agency", "codes-agency",
"codes-common", "codes-common",
"csv", "csv",
"serde",
"tera", "tera",
] ]
@ -315,6 +325,7 @@ version = "0.1.0"
name = "jichanorg-jmdict" name = "jichanorg-jmdict"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"bincode",
"codes-iso-639", "codes-iso-639",
"serde", "serde",
"serde_json", "serde_json",

1
jmdict/.gitignore vendored

@ -0,0 +1 @@
JMdict*.bin

@ -6,6 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
bincode = "1.3.3"
serde = { version = "1.0.175", features = ["serde_derive"] } serde = { version = "1.0.175", features = ["serde_derive"] }
serde_json = "1.0.103" serde_json = "1.0.103"
@ -13,5 +14,4 @@ serde_json = "1.0.103"
git = "https://github.com/ElnuDev/rust-codes.git" git = "https://github.com/ElnuDev/rust-codes.git"
rev = "bea9e74d0ec2aaec0b74c2fa6f8da0490a638090" rev = "bea9e74d0ec2aaec0b74c2fa6f8da0490a638090"
version = "0.1.5" version = "0.1.5"
default-features = false # no serde
features = ["part_2"] features = ["part_2"]

@ -1,15 +1,15 @@
use codes_iso_639::part_2::LanguageCode; use codes_iso_639::part_2::LanguageCode;
use serde::Deserialize; use serde::{Serialize, Deserialize};
use crate::serial::*; use crate::serial::*;
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct Jmdict { pub struct Jmdict {
pub entries: Vec<JmdictEntry>, pub entries: Vec<JmdictEntry>,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictEntry { pub struct JmdictEntry {
pub sequence: i32, pub sequence: i32,
@ -19,7 +19,7 @@ pub struct JmdictEntry {
pub sense: Vec<JmdictSense>, pub sense: Vec<JmdictSense>,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictExample { pub struct JmdictExample {
// Always empty with latest version of JMdict // Always empty with latest version of JMdict
@ -28,7 +28,7 @@ pub struct JmdictExample {
pub sentences: Vec<JmdictExampleSentence>, pub sentences: Vec<JmdictExampleSentence>,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictExampleSentence { pub struct JmdictExampleSentence {
#[serde(deserialize_with = "lang")] #[serde(deserialize_with = "lang")]
@ -36,13 +36,13 @@ pub struct JmdictExampleSentence {
pub text: String, pub text: String,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub enum JmdictExampleSourceSrcType { pub enum JmdictExampleSourceSrcType {
Amogus, Amogus,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictGlossary { pub struct JmdictGlossary {
pub content: String, pub content: String,
@ -55,7 +55,7 @@ pub struct JmdictGlossary {
} }
// https://github.com/FooSoft/yomichan/issues/2057 // https://github.com/FooSoft/yomichan/issues/2057
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
pub enum JmdictGlossaryType { pub enum JmdictGlossaryType {
#[serde(rename = "lit")] #[serde(rename = "lit")]
Literal, Literal,
@ -67,7 +67,7 @@ pub enum JmdictGlossaryType {
Trademark, Trademark,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictKanji { pub struct JmdictKanji {
pub expression: String, pub expression: String,
@ -77,7 +77,7 @@ pub struct JmdictKanji {
pub priorities: Vec<String>, pub priorities: Vec<String>,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictReading { pub struct JmdictReading {
pub reading: String, pub reading: String,
@ -92,7 +92,7 @@ pub struct JmdictReading {
pub priorities: Vec<String>, pub priorities: Vec<String>,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictSense { pub struct JmdictSense {
#[serde(deserialize_with = "nullable_list")] #[serde(deserialize_with = "nullable_list")]
@ -121,7 +121,7 @@ pub struct JmdictSense {
pub examples: Vec<JmdictExample>, pub examples: Vec<JmdictExample>,
} }
#[derive(Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)] #[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictSource { pub struct JmdictSource {
pub content: String, pub content: String,

@ -1,10 +1,9 @@
use std::fs; use std::{fs::{self, File}, io::{Write, Read}};
use crate::jmdict::Jmdict; use crate::jmdict::Jmdict;
#[test] fn get_jmdict_json() -> String {
fn jmdict() { fs::read_dir("loader")
let contents = fs::read_dir("loader")
.unwrap() .unwrap()
.filter_map(|file| { .filter_map(|file| {
let file = file.unwrap(); let file = file.unwrap();
@ -16,6 +15,23 @@ fn jmdict() {
}) })
.next() .next()
.unwrap() .unwrap()
.unwrap(); .unwrap()
let _jmdict: Jmdict = serde_json::from_str(&contents).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<u8> = 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();
} }

Loading…
Cancel
Save