use crate::{Codepoint, Grade, QueryCode, Radical, Reading, Reference, StrokeCount, Variant};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub type Translations = HashMap<String, Vec<String>>;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Character {
pub literal: char,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub codepoints: Vec<Codepoint>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub radicals: Vec<Radical>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grade: Option<Grade>,
pub stroke_counts: StrokeCount,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub variants: Vec<Variant>,
#[serde(skip_serializing_if = "Option::is_none")]
pub frequency: Option<u16>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub radical_names: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub jlpt: Option<u8>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub references: Vec<Reference>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub query_codes: Vec<QueryCode>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub readings: Vec<Reading>,
pub translations: Translations,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub nanori: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub decomposition: Vec<char>,
}