Skip to main content

vn_core/model/
schema.rs

1use serde::{Deserialize, Deserializer, Serialize};
2use serde_json::Value as JsonValue;
3use std::result::Result as StdResult;
4use strum::{Display, EnumString};
5
6#[remain::sorted]
7#[derive(Clone, Debug, Deserialize, Serialize)]
8#[cfg_attr(feature = "specta", derive(specta::Type))]
9pub struct Schema {
10  pub api_fields: JsonValue,
11  pub enums: SchemaEnum,
12  pub extlinks: JsonValue,
13}
14
15#[remain::sorted]
16#[derive(Clone, Debug, Deserialize, Serialize)]
17#[cfg_attr(feature = "specta", derive(specta::Type))]
18pub struct SchemaEnum {
19  pub language: JsonValue,
20  pub medium: JsonValue,
21  pub platform: JsonValue,
22  pub staff_role: JsonValue,
23}
24
25#[non_exhaustive]
26#[remain::sorted]
27#[derive(Clone, Debug, Serialize, PartialEq, Eq, Hash, Display, EnumString)]
28#[cfg_attr(feature = "specta", derive(specta::Type))]
29pub enum Language {
30  #[serde(rename = "zh")]
31  #[strum(serialize = "zh")]
32  Chinese,
33
34  #[serde(rename = "en")]
35  #[strum(serialize = "en")]
36  English,
37
38  #[serde(rename = "ja")]
39  #[strum(serialize = "ja")]
40  Japanese,
41
42  #[serde(rename = "ko")]
43  #[strum(serialize = "ko")]
44  Korean,
45
46  #[serde(rename = "pt")]
47  #[strum(serialize = "pt")]
48  Portuguese,
49
50  #[serde(rename = "ru")]
51  #[strum(serialize = "ru")]
52  Russian,
53
54  #[serde(rename = "es")]
55  #[strum(serialize = "es")]
56  Spanish,
57
58  Unknown(String),
59}
60
61impl<'de> Deserialize<'de> for Language {
62  fn deserialize<D: Deserializer<'de>>(deserializer: D) -> StdResult<Self, D::Error> {
63    let s = String::deserialize(deserializer)?;
64    Ok(match s.as_str() {
65      "zh" | "zh-Hans" | "zh-Hant" => Language::Chinese,
66      "en" => Language::English,
67      "ja" => Language::Japanese,
68      "ko" => Language::Korean,
69      "pt-br" | "pt-pt" => Language::Portuguese,
70      "ru" => Language::Russian,
71      "es" => Language::Spanish,
72      _ => Language::Unknown(s),
73    })
74  }
75}