Want to contribute? Fork me on Codeberg.org!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
4.3 KiB

use codes_iso_639::part_2::LanguageCode;
use serde::{Serialize, Deserialize};
use crate::serial::*;
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct Jmdict {
pub entries: Vec<JmdictEntry>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictEntry {
pub sequence: i32,
#[serde(deserialize_with = "nullable_list")]
pub kanji: Vec<JmdictKanji>,
pub readings: Vec<JmdictReading>,
pub sense: Vec<JmdictSense>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictExample {
// 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>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictExampleSentence {
#[serde(deserialize_with = "lang")]
pub lang: LanguageCode,
pub text: String,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub enum JmdictExampleSourceSrcType {
Amogus,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictGlossary {
pub content: String,
#[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_blank")]
gender: serde::de::IgnoredAny,
pub r#type: Option<JmdictGlossaryType>,
}
// https://github.com/FooSoft/yomichan/issues/2057
#[derive(Serialize, Deserialize)]
pub enum JmdictGlossaryType {
#[serde(rename = "lit")]
Literal,
#[serde(rename = "fig")]
Figurative, // ?
#[serde(rename = "expl")]
Explanatory,
#[serde(rename = "tm")]
Trademark,
}
#[derive(Serialize, Deserialize)]
#[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>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictReading {
pub reading: String,
// 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>,
}
#[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>,
#[serde(deserialize_with = "nullable_list")]
pub examples: Vec<JmdictExample>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"), deny_unknown_fields)]
pub struct JmdictSource {
pub content: String,
#[serde(deserialize_with = "lang_default_eng")]
pub language: LanguageCode,
pub r#type: Option<String>,
#[serde(deserialize_with = "wasei")]
pub wasei: bool,
}