mirror of
https://github.com/minagawah/mikaboshi.git
synced 2026-03-27 08:28:29 +07:00
feat: Reading JSON files for data
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -8,3 +8,5 @@ Cargo.lock
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
src/resources
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
[package]
|
||||
name = "mikaboshi"
|
||||
version = "0.1.3"
|
||||
version = "0.2.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
# env_logger = "0.8.4"
|
||||
lazy_static = "1.4.0"
|
||||
# log = "0.4.0"
|
||||
serde = { version = "1.0.127", features = ["derive"] }
|
||||
serde_json = "1.0.75"
|
||||
sowngwala = { git = "https://github.com/minagawah/sowngwala", version = "0.4.0" }
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
@@ -109,6 +109,11 @@ println!("時: {} ({})", hour.alphabet(), hour.alphabet_ja());
|
||||
// 時: 癸未 (みずのと・ひつじ)
|
||||
```
|
||||
|
||||
## Test
|
||||
|
||||
```
|
||||
RUST_BACKTRACE=1 cargo test -vv -- --nocapture
|
||||
```
|
||||
|
||||
## Dislaimer
|
||||
|
||||
|
||||
134
json/ganzhi_branches.json
Normal file
134
json/ganzhi_branches.json
Normal file
@@ -0,0 +1,134 @@
|
||||
[
|
||||
{
|
||||
"no": 1,
|
||||
"name": {
|
||||
"en": "zi",
|
||||
"ja": ["ね", "ne"],
|
||||
"ja2": ["し", "shi"],
|
||||
"vi": ["tí", "tí"],
|
||||
"zh_cn": ["子", "zǐ"],
|
||||
"zh_tw": ["子", "zǐ"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 2,
|
||||
"name": {
|
||||
"en": "chou",
|
||||
"ja": ["うし", "ushi"],
|
||||
"ja2": ["ちゅう", "chu"],
|
||||
"vi": ["sửu", "sửu"],
|
||||
"zh_cn": ["丑", "chǒu"],
|
||||
"zh_tw": ["丑", "chǒu"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 3,
|
||||
"name": {
|
||||
"en": "",
|
||||
"ja": ["とら", "tora"],
|
||||
"ja2": ["いん", "in"],
|
||||
"vi": ["dần", "dần"],
|
||||
"zh_cn": ["寅", "yín"],
|
||||
"zh_tw": ["寅", "yín"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 4,
|
||||
"name": {
|
||||
"en": "mao",
|
||||
"ja": ["う", "u"],
|
||||
"ja2": ["ぼう", "bou"],
|
||||
"vi": ["mão", "mão"],
|
||||
"zh_cn": ["卯", "mǎo"],
|
||||
"zh_tw": ["卯", "mǎo"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 5,
|
||||
"name": {
|
||||
"en": "",
|
||||
"ja": ["たつ", "tatsu"],
|
||||
"ja2": ["しん", "shin"],
|
||||
"vi": ["thần", "thần"],
|
||||
"zh_cn": ["辰", "chén"],
|
||||
"zh_tw": ["辰", "chén"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 6,
|
||||
"name": {
|
||||
"en": "si",
|
||||
"ja": ["み", "mi"],
|
||||
"ja2": ["し", "shi"],
|
||||
"vi": ["tị", "tị"],
|
||||
"zh_cn": ["巳", "sì"],
|
||||
"zh_tw": ["巳", "sì"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 7,
|
||||
"name": {
|
||||
"en": "wu",
|
||||
"ja": ["うま", "uma"],
|
||||
"ja2": ["ご", "go"],
|
||||
"vi": ["ngọ", "ngọ"],
|
||||
"zh_cn": ["午", "wǔ"],
|
||||
"zh_tw": ["午", "wǔ"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 8,
|
||||
"name": {
|
||||
"en": "wei",
|
||||
"ja": ["ひつじ", "hitsuji"],
|
||||
"ja2": ["び", "bi"],
|
||||
"vi": ["vị", "vị"],
|
||||
"zh_cn": ["未", "wèi"],
|
||||
"zh_tw": ["未", "wèi"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 9,
|
||||
"name": {
|
||||
"en": "shen",
|
||||
"ja": ["さる", "saru"],
|
||||
"ja2": ["しん", "shin"],
|
||||
"vi": ["thân", "thân"],
|
||||
"zh_cn": ["申", "shēn"],
|
||||
"zh_tw": ["申", "shēn"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 10,
|
||||
"name": {
|
||||
"en": "you",
|
||||
"ja": ["とり", "tori"],
|
||||
"ja2": ["ゆう", "yuu"],
|
||||
"vi": ["dậu", "dậu"],
|
||||
"zh_cn": ["酉", "yǒu"],
|
||||
"zh_tw": ["酉", "yǒu"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 11,
|
||||
"name": {
|
||||
"en": "xu",
|
||||
"ja": ["いぬ", "inu"],
|
||||
"ja2": ["じゅつ", "jutsu"],
|
||||
"vi": ["tuất", "tuất"],
|
||||
"zh_cn": ["戌", "xū"],
|
||||
"zh_tw": ["戌", "xū"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 12,
|
||||
"name": {
|
||||
"en": "hai",
|
||||
"ja": ["い", "i"],
|
||||
"ja2": ["がい", "gai"],
|
||||
"vi": ["hợi", "hợi"],
|
||||
"zh_cn": ["亥", "hài"],
|
||||
"zh_tw": ["亥", "hài"]
|
||||
}
|
||||
}
|
||||
]
|
||||
112
json/ganzhi_stems.json
Normal file
112
json/ganzhi_stems.json
Normal file
@@ -0,0 +1,112 @@
|
||||
[
|
||||
{
|
||||
"no": 1,
|
||||
"name": {
|
||||
"en": "jia",
|
||||
"ja": ["きのえ", "kinoe"],
|
||||
"ja2": ["コウ", "kou"],
|
||||
"vi": ["giáp", "giap"],
|
||||
"zh_cn": ["甲", "jiǎ"],
|
||||
"zh_tw": ["甲", "jiǎ"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 2,
|
||||
"name": {
|
||||
"en": "yi",
|
||||
"ja": ["きのと", "kinoto"],
|
||||
"ja2": ["オツ", "otsu"],
|
||||
"vi": ["ất", "ất"],
|
||||
"zh_cn": ["乙", "yǐ"],
|
||||
"zh_tw": ["乙", "yǐ"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 3,
|
||||
"name": {
|
||||
"en": "bing",
|
||||
"ja": ["ひのえ", "hinoe"],
|
||||
"ja2": ["ヘイ", "hei"],
|
||||
"vi": ["bính", "bính"],
|
||||
"zh_cn": ["丙", "bǐng"],
|
||||
"zh_tw": ["丙", "bǐng"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 4,
|
||||
"name": {
|
||||
"en": "ding",
|
||||
"ja": ["ひのと", "hinoto"],
|
||||
"ja2": ["テイ", "tei"],
|
||||
"vi": ["đinh", "đinh"],
|
||||
"zh_cn": ["丁", "dīng"],
|
||||
"zh_tw": ["丁", "dīng"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 5,
|
||||
"name": {
|
||||
"en": "wu",
|
||||
"ja": ["つちのえ", "tsuchinoe"],
|
||||
"ja2": ["ボ", "bo"],
|
||||
"vi": ["mậu", "mậu"],
|
||||
"zh_cn": ["戊", "wù"],
|
||||
"zh_tw": ["戊", "wù"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 6,
|
||||
"name": {
|
||||
"en": "ji",
|
||||
"ja": ["つちのと", "tsuchinoe"],
|
||||
"ja2": ["キ", "ki"],
|
||||
"vi": ["kỷ", "kỷ"],
|
||||
"zh_cn": ["己", "jǐ"],
|
||||
"zh_tw": ["己", "jǐ"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 7,
|
||||
"name": {
|
||||
"en": "geng",
|
||||
"ja": ["かのえ", "kanoe"],
|
||||
"ja2": ["コウ", "kou"],
|
||||
"vi": ["canh", "canh"],
|
||||
"zh_cn": ["庚", "gēng"],
|
||||
"zh_tw": ["庚", "gēng"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 8,
|
||||
"name": {
|
||||
"en": "xin",
|
||||
"ja": ["かのと", "kanoto"],
|
||||
"ja2": ["シン", "shin"],
|
||||
"vi": ["tân", "tân"],
|
||||
"zh_cn": ["辛", "xīn"],
|
||||
"zh_tw": ["辛", "xīn"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 9,
|
||||
"name": {
|
||||
"en": "ren",
|
||||
"ja": ["みずのえ", "mizunoe"],
|
||||
"ja2": ["ジン", "jin"],
|
||||
"vi": ["nhâm", "nhâm"],
|
||||
"zh_cn": ["壬", "rén"],
|
||||
"zh_tw": ["壬", "rén"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"no": 10,
|
||||
"name": {
|
||||
"en": "gui",
|
||||
"ja": ["みずのと", "mizunoto"],
|
||||
"ja2": ["キ", "ki"],
|
||||
"vi": ["quý", "quý"],
|
||||
"zh_cn": ["癸", "guǐ"],
|
||||
"zh_tw": ["癸", "guǐ"]
|
||||
}
|
||||
}
|
||||
]
|
||||
290
json/solar_terms.json
Normal file
290
json/solar_terms.json
Normal file
@@ -0,0 +1,290 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": {
|
||||
"en": "lichun",
|
||||
"ja": ["立春", "risshun"],
|
||||
"ja2": ["りっしゅん", "risshun"],
|
||||
"vi": ["lập xuân", "lập xuân"],
|
||||
"zh_cn": ["立春", "lìchūn"],
|
||||
"zh_tw": ["立春", "lìchūn"]
|
||||
},
|
||||
"angle": 315
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": {
|
||||
"en": "yushui",
|
||||
"ja": ["雨水", "usui"],
|
||||
"ja2": ["うすい", "usui"],
|
||||
"vi": ["vũ thủy", "vũ thủy"],
|
||||
"zh_cn": ["雨水", "yǔshuǐ"],
|
||||
"zh_tw": ["雨水", "yǔshuǐ"]
|
||||
},
|
||||
"angle": 330
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": {
|
||||
"en": "jingzhe",
|
||||
"ja": ["啓蟄", "keichitsu"],
|
||||
"ja2": ["けいちつ", "keichitsu"],
|
||||
"vi": ["kinh trập", "kinh trập"],
|
||||
"zh_cn": ["驚蟄", "jīngzhé"],
|
||||
"zh_tw": ["驚蟄", "jīngzhé"]
|
||||
},
|
||||
"angle": 345
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": {
|
||||
"en": "chunfen",
|
||||
"ja": ["春分", "shunbun"],
|
||||
"ja2": ["しゅんぶん", "shunbun"],
|
||||
"vi": ["xuân phân", "xuân phân"],
|
||||
"zh_cn": ["春分", "chūnfēn"],
|
||||
"zh_tw": ["春分", "chūnfēn"]
|
||||
},
|
||||
"angle": 0
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": {
|
||||
"en": "qingming",
|
||||
"ja": ["清明", "seimei"],
|
||||
"ja2": ["せいめい", "seimei"],
|
||||
"vi": ["thanh minh", "thanh minh"],
|
||||
"zh_cn": ["清明", "qīngmíng"],
|
||||
"zh_tw": ["清明", "qīngmíng"]
|
||||
},
|
||||
"angle": 15
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": {
|
||||
"en": "guyu",
|
||||
"ja": ["穀雨", "kokuu"],
|
||||
"ja2": ["こくう", "kokuu"],
|
||||
"vi": ["cốc vũ", "cốc vũ"],
|
||||
"zh_cn": ["穀雨", "gǔyǔ"],
|
||||
"zh_tw": ["穀雨", "gǔyǔ"]
|
||||
},
|
||||
"angle": 30
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": {
|
||||
"en": "lixia",
|
||||
"ja": ["立夏", "rikka"],
|
||||
"ja2": ["りっか", "rikka"],
|
||||
"vi": ["lập hạ", "lập hạ"],
|
||||
"zh_cn": ["立夏", "lìxià"],
|
||||
"zh_tw": ["立夏", "lìxià"]
|
||||
},
|
||||
"angle": 45
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": {
|
||||
"en": "xiaoman",
|
||||
"ja": ["小満", "shouman"],
|
||||
"ja2": ["しょうまん", "shouman"],
|
||||
"vi": ["tiểu mãn", "tiểu mãn"],
|
||||
"zh_cn": ["小滿", "xiǎomǎn"],
|
||||
"zh_tw": ["小滿", "xiǎomǎn"]
|
||||
},
|
||||
"angle": 60
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": {
|
||||
"en": "mangzhong",
|
||||
"ja": ["芒種", "boushu"],
|
||||
"ja2": ["ぼうしゅ", "boushu"],
|
||||
"vi": ["mang chủng", "mang chủng"],
|
||||
"zh_cn": ["芒種", "mángzhòng"],
|
||||
"zh_tw": ["芒種", "mángzhòng"]
|
||||
},
|
||||
"angle": 75
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": {
|
||||
"en": "xiazhi",
|
||||
"ja": ["夏至", "geshi"],
|
||||
"ja2": ["げし", "geshi"],
|
||||
"vi": ["hạ chí", "hạ chí"],
|
||||
"zh_cn": ["夏至", "xiàzhì"],
|
||||
"zh_tw": ["夏至", "xiàzhì"]
|
||||
},
|
||||
"angle": 90
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": {
|
||||
"en": "xiaoshu",
|
||||
"ja": ["小暑", "shousho"],
|
||||
"ja2": ["しょうしょ", "shousho"],
|
||||
"vi": ["tiểu thử", "tiểu thử"],
|
||||
"zh_cn": ["小暑", "xiǎoshǔ"],
|
||||
"zh_tw": ["小暑", "xiǎoshǔ"]
|
||||
},
|
||||
"angle": 105
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": {
|
||||
"en": "dashu",
|
||||
"ja": ["大暑", "taisho"],
|
||||
"ja2": ["たいしょ", "taisho"],
|
||||
"vi": ["đại thử", "đại thử"],
|
||||
"zh_cn": ["大暑", "dàshǔ"],
|
||||
"zh_tw": ["大暑", "dàshǔ"]
|
||||
},
|
||||
"angle": 120
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": {
|
||||
"en": "liqiu",
|
||||
"ja": ["立秋", "risshuu"],
|
||||
"ja2": ["りっしゅう", "risshuu"],
|
||||
"vi": ["lập thu", "lập thu"],
|
||||
"zh_cn": ["立秋", "lìqiū"],
|
||||
"zh_tw": ["立秋", "lìqiū"]
|
||||
},
|
||||
"angle": 135
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": {
|
||||
"en": "chushu",
|
||||
"ja": ["処暑", "shosho"],
|
||||
"ja2": ["しょしょ", "shosho"],
|
||||
"vi": ["xử thử", "xử thử"],
|
||||
"zh_cn": ["處暑", "chǔshǔ"],
|
||||
"zh_tw": ["處暑", "chǔshǔ"]
|
||||
},
|
||||
"angle": 150
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": {
|
||||
"en": "bailu",
|
||||
"ja": ["白露", "hakuro"],
|
||||
"ja2": ["はくろ", "hakuro"],
|
||||
"vi": ["bạch lộ", "bạch lộ"],
|
||||
"zh_cn": ["白露", "báilù"],
|
||||
"zh_tw": ["白露", "báilù"]
|
||||
},
|
||||
"angle": 165
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": {
|
||||
"en": "qiufen",
|
||||
"ja": ["秋分", "shubun"],
|
||||
"ja2": ["しゅうぶん", "shubun"],
|
||||
"vi": ["thu phân", "thu phân"],
|
||||
"zh_cn": ["秋分", "qiūfēn"],
|
||||
"zh_tw": ["秋分", "qiūfēn"]
|
||||
},
|
||||
"angle": 180
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": {
|
||||
"en": "hanlu",
|
||||
"ja": ["寒露", "kanro"],
|
||||
"ja2": ["かんろ", "kanro"],
|
||||
"vi": ["hàn lộ", "hàn lộ"],
|
||||
"zh_cn": ["寒露", "hánlù"],
|
||||
"zh_tw": ["寒露", "hánlù"]
|
||||
},
|
||||
"angle": 195
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": {
|
||||
"en": "shuanjiang",
|
||||
"ja": ["霜降", "soukou"],
|
||||
"ja2": ["そうこう", "soukou"],
|
||||
"vi": ["sương giáng", "sương giáng"],
|
||||
"zh_cn": ["霜降", "shuāngjiàng"],
|
||||
"zh_tw": ["", ""]
|
||||
},
|
||||
"angle": 210
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": {
|
||||
"en": "lidong",
|
||||
"ja": ["立冬", "rittou"],
|
||||
"ja2": ["りっとう", "rittou"],
|
||||
"vi": ["lập đông", "lập đông"],
|
||||
"zh_cn": ["立冬", "lìdōng"],
|
||||
"zh_tw": ["立冬", "lìdōng"]
|
||||
},
|
||||
"angle": 225
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": {
|
||||
"en": "xiaoxue",
|
||||
"ja": ["小雪", "shousetsu"],
|
||||
"ja2": ["しょうせつ", "shousetsu"],
|
||||
"vi": ["tiểu tuyết", "tiểu tuyết"],
|
||||
"zh_cn": ["小雪", "xiǎoxuě"],
|
||||
"zh_tw": ["小雪", "xiǎoxuě"]
|
||||
},
|
||||
"angle": 240
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": {
|
||||
"en": "daxue",
|
||||
"ja": ["大雪", "taisetsu"],
|
||||
"ja2": ["たいせつ", "taisetsu"],
|
||||
"vi": ["đại tuyết", "đại tuyết"],
|
||||
"zh_cn": ["大雪", "dàxuě"],
|
||||
"zh_tw": ["大雪", "dàxuě"]
|
||||
},
|
||||
"angle": 255
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": {
|
||||
"en": "dongzhi",
|
||||
"ja": ["冬至", "touji"],
|
||||
"ja2": ["とうじ", "touji"],
|
||||
"vi": ["Đông chí", "Đông chí"],
|
||||
"zh_cn": ["冬至", "dōngzhì"],
|
||||
"zh_tw": ["冬至", "dōngzhì"]
|
||||
},
|
||||
"angle": 270
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": {
|
||||
"en": "xiaohan",
|
||||
"ja": ["小寒", "shoukan"],
|
||||
"ja2": ["しょうかん", "shoukan"],
|
||||
"vi": ["tiểu hàn", "tiểu hàn"],
|
||||
"zh_cn": ["小寒", "xiǎohán"],
|
||||
"zh_tw": ["小寒", "xiǎohán"]
|
||||
},
|
||||
"angle": 285
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": {
|
||||
"en": "dahan",
|
||||
"ja": ["大寒", "daikan"],
|
||||
"ja2": ["だいかん", "daikan"],
|
||||
"vi": ["Đại hàn", "Đại hàn"],
|
||||
"zh_cn": ["大寒", "dàhán"],
|
||||
"zh_tw": ["大寒", "dàhán"]
|
||||
},
|
||||
"angle": 300
|
||||
}
|
||||
]
|
||||
682
src/constants.rs
682
src/constants.rs
@@ -1,322 +1,61 @@
|
||||
use crate::language::{ Language, LanguageDetails };
|
||||
use crate::ganzhi::{ Stem, Branch };
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::ganzhi::{Branch, Stem};
|
||||
use crate::language::{Language, LanguageDetails};
|
||||
use crate::solar_terms::SolarTerm;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct LanguageData {
|
||||
pub en: String,
|
||||
pub ja: Vec<String>,
|
||||
pub ja2: Vec<String>,
|
||||
pub vi: Vec<String>,
|
||||
pub zh_cn: Vec<String>,
|
||||
pub zh_tw: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct SolarTermData {
|
||||
pub id: u8,
|
||||
pub name: LanguageData,
|
||||
pub angle: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct StemData {
|
||||
pub no: u8,
|
||||
pub name: LanguageData,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct BranchData {
|
||||
pub no: u8,
|
||||
pub name: LanguageData,
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
pub static ref SOLAR_TERMS: Vec<SolarTerm> = vec![
|
||||
// 立春 (lichun)
|
||||
SolarTerm {
|
||||
id: 1,
|
||||
name: Language {
|
||||
en: "lichun".into(),
|
||||
ja: LanguageDetails::new("立春", "risshun"),
|
||||
ja2: LanguageDetails::new("りっしゅん", "risshun"),
|
||||
vi: LanguageDetails::new("lập xuân", "lập xuân"),
|
||||
zh_cn: LanguageDetails::new("立春", "lìchūn"),
|
||||
zh_tw: LanguageDetails::new("立春", "lìchūn"),
|
||||
},
|
||||
angle: 315,
|
||||
},
|
||||
// 雨水 (yushui)
|
||||
SolarTerm {
|
||||
id: 2,
|
||||
name: Language {
|
||||
en: "yushui".into(),
|
||||
ja: LanguageDetails::new("雨水", "usui"),
|
||||
ja2: LanguageDetails::new("うすい", "usui"),
|
||||
vi: LanguageDetails::new("vũ thủy", "vũ thủy"),
|
||||
zh_cn: LanguageDetails::new("雨水", "yǔshuǐ"),
|
||||
zh_tw: LanguageDetails::new("雨水", "yǔshuǐ"),
|
||||
},
|
||||
angle: 330,
|
||||
},
|
||||
// 驚蟄 (啓蟄) (jingzhe)
|
||||
SolarTerm {
|
||||
id: 3,
|
||||
name: Language {
|
||||
en: "jingzhe".into(),
|
||||
ja: LanguageDetails::new("啓蟄", "keichitsu"),
|
||||
ja2: LanguageDetails::new("けいちつ", "keichitsu"),
|
||||
vi: LanguageDetails::new("kinh trập", "kinh trập"),
|
||||
zh_cn: LanguageDetails::new("驚蟄", "jīngzhé"),
|
||||
zh_tw: LanguageDetails::new("驚蟄", "jīngzhé"),
|
||||
},
|
||||
angle: 345,
|
||||
},
|
||||
// 春分 (chunfen)
|
||||
SolarTerm {
|
||||
id: 4,
|
||||
name: Language {
|
||||
en: "chunfen".into(),
|
||||
ja: LanguageDetails::new("春分", "shunbun"),
|
||||
ja2: LanguageDetails::new("しゅんぶん", "shunbun"),
|
||||
vi: LanguageDetails::new("xuân phân", "xuân phân"),
|
||||
zh_cn: LanguageDetails::new("春分", "chūnfēn"),
|
||||
zh_tw: LanguageDetails::new("春分", "chūnfēn"),
|
||||
},
|
||||
angle: 0,
|
||||
},
|
||||
// 清明 (qingming)
|
||||
SolarTerm {
|
||||
id: 5,
|
||||
name: Language {
|
||||
en: "qingming".into(),
|
||||
ja: LanguageDetails::new("清明", "seimei"),
|
||||
ja2: LanguageDetails::new("せいめい", "seimei"),
|
||||
vi: LanguageDetails::new("thanh minh", "thanh minh"),
|
||||
zh_cn: LanguageDetails::new("清明", "qīngmíng"),
|
||||
zh_tw: LanguageDetails::new("清明", "qīngmíng"),
|
||||
},
|
||||
angle: 15,
|
||||
},
|
||||
// 穀雨 (guyu)
|
||||
SolarTerm {
|
||||
id: 6,
|
||||
name: Language {
|
||||
en: "guyu".into(),
|
||||
ja: LanguageDetails::new("穀雨", "kokuu"),
|
||||
ja2: LanguageDetails::new("こくう", "kokuu"),
|
||||
vi: LanguageDetails::new("cốc vũ", "cốc vũ"),
|
||||
zh_cn: LanguageDetails::new("穀雨", "gǔyǔ"),
|
||||
zh_tw: LanguageDetails::new("穀雨", "gǔyǔ"),
|
||||
},
|
||||
angle: 30,
|
||||
},
|
||||
// 立夏 (lixia)
|
||||
SolarTerm {
|
||||
id: 7,
|
||||
name: Language {
|
||||
en: "lixia".into(),
|
||||
ja: LanguageDetails::new("立夏", "rikka"),
|
||||
ja2: LanguageDetails::new("りっか", "rikka"),
|
||||
vi: LanguageDetails::new("lập hạ", "lập hạ"),
|
||||
zh_cn: LanguageDetails::new("立夏", "lìxià"),
|
||||
zh_tw: LanguageDetails::new("立夏", "lìxià"),
|
||||
},
|
||||
angle: 45,
|
||||
},
|
||||
// 小滿 (xiaoman)
|
||||
SolarTerm {
|
||||
id: 8,
|
||||
name: Language {
|
||||
en: "xiaoman".into(),
|
||||
ja: LanguageDetails::new("小満", "shouman"),
|
||||
ja2: LanguageDetails::new("しょうまん", "shouman"),
|
||||
vi: LanguageDetails::new("tiểu mãn", "tiểu mãn"),
|
||||
zh_cn: LanguageDetails::new("小滿", "xiǎomǎn"),
|
||||
zh_tw: LanguageDetails::new("小滿", "xiǎomǎn"),
|
||||
},
|
||||
angle: 60,
|
||||
},
|
||||
// 芒種 (mangzhong)
|
||||
SolarTerm {
|
||||
id: 9,
|
||||
name: Language {
|
||||
en: "mangzhong".into(),
|
||||
ja: LanguageDetails::new("芒種", "boushu"),
|
||||
ja2: LanguageDetails::new("ぼうしゅ", "boushu"),
|
||||
vi: LanguageDetails::new("mang chủng", "mang chủng"),
|
||||
zh_cn: LanguageDetails::new("芒種", "mángzhòng"),
|
||||
zh_tw: LanguageDetails::new("芒種", "mángzhòng"),
|
||||
},
|
||||
angle: 75,
|
||||
},
|
||||
// 夏至 (xiazhi)
|
||||
SolarTerm {
|
||||
id: 10,
|
||||
name: Language {
|
||||
en: "xiazhi".into(),
|
||||
ja: LanguageDetails::new("夏至", "geshi"),
|
||||
ja2: LanguageDetails::new("げし", "geshi"),
|
||||
vi: LanguageDetails::new("hạ chí", "hạ chí"),
|
||||
zh_cn: LanguageDetails::new("夏至", "xiàzhì"),
|
||||
zh_tw: LanguageDetails::new("夏至", "xiàzhì"),
|
||||
},
|
||||
angle: 90,
|
||||
},
|
||||
// 小暑 (xiaoshu)
|
||||
SolarTerm {
|
||||
id: 11,
|
||||
name: Language {
|
||||
en: "xiaoshu".into(),
|
||||
ja: LanguageDetails::new("小暑", "shousho"),
|
||||
ja2: LanguageDetails::new("しょうしょ", "shousho"),
|
||||
vi: LanguageDetails::new("tiểu thử", "tiểu thử"),
|
||||
zh_cn: LanguageDetails::new("小暑", "xiǎoshǔ"),
|
||||
zh_tw: LanguageDetails::new("小暑", "xiǎoshǔ"),
|
||||
},
|
||||
angle: 105,
|
||||
},
|
||||
// 大暑 (dashu)
|
||||
SolarTerm {
|
||||
id: 12,
|
||||
name: Language {
|
||||
en: "dashu".into(),
|
||||
ja: LanguageDetails::new("大暑", "taisho"),
|
||||
ja2: LanguageDetails::new("たいしょ", "taisho"),
|
||||
vi: LanguageDetails::new("đại thử", "đại thử"),
|
||||
zh_cn: LanguageDetails::new("大暑", "dàshǔ"),
|
||||
zh_tw: LanguageDetails::new("大暑", "dàshǔ"),
|
||||
},
|
||||
angle: 120,
|
||||
},
|
||||
// 立秋 (liqiu)
|
||||
SolarTerm {
|
||||
id: 13,
|
||||
name: Language {
|
||||
en: "liqiu".into(),
|
||||
ja: LanguageDetails::new("立秋", "risshuu"),
|
||||
ja2: LanguageDetails::new("りっしゅう", "risshuu"),
|
||||
vi: LanguageDetails::new("lập thu", "lập thu"),
|
||||
zh_cn: LanguageDetails::new("立秋", "lìqiū"),
|
||||
zh_tw: LanguageDetails::new("立秋", "lìqiū"),
|
||||
},
|
||||
angle: 135,
|
||||
},
|
||||
// 處暑 (chushu)
|
||||
SolarTerm {
|
||||
id: 14,
|
||||
name: Language {
|
||||
en: "chushu".into(),
|
||||
ja: LanguageDetails::new("処暑", "shosho"),
|
||||
ja2: LanguageDetails::new("しょしょ", "shosho"),
|
||||
vi: LanguageDetails::new("xử thử", "xử thử"),
|
||||
zh_cn: LanguageDetails::new("處暑", "chǔshǔ"),
|
||||
zh_tw: LanguageDetails::new("處暑", "chǔshǔ"),
|
||||
},
|
||||
angle: 150,
|
||||
},
|
||||
// 白露 (bailu)
|
||||
SolarTerm {
|
||||
id: 15,
|
||||
name: Language {
|
||||
en: "bailu".into(),
|
||||
ja: LanguageDetails::new("白露", "hakuro"),
|
||||
ja2: LanguageDetails::new("はくろ", "hakuro"),
|
||||
vi: LanguageDetails::new("bạch lộ", "bạch lộ"),
|
||||
zh_cn: LanguageDetails::new("白露", "báilù"),
|
||||
zh_tw: LanguageDetails::new("白露", "báilù"),
|
||||
},
|
||||
angle: 165,
|
||||
},
|
||||
// 秋分 (qiufen)
|
||||
SolarTerm {
|
||||
id: 16,
|
||||
name: Language {
|
||||
en: "qiufen".into(),
|
||||
ja: LanguageDetails::new("秋分", "shubun"),
|
||||
ja2: LanguageDetails::new("しゅうぶん", "shubun"),
|
||||
vi: LanguageDetails::new("thu phân", "thu phân"),
|
||||
zh_cn: LanguageDetails::new("秋分", "qiūfēn"),
|
||||
zh_tw: LanguageDetails::new("秋分", "qiūfēn"),
|
||||
},
|
||||
angle: 180,
|
||||
},
|
||||
// 寒露 (hanlu)
|
||||
SolarTerm {
|
||||
id: 17,
|
||||
name: Language {
|
||||
en: "hanlu".into(),
|
||||
ja: LanguageDetails::new("寒露", "kanro"),
|
||||
ja2: LanguageDetails::new("かんろ", "kanro"),
|
||||
vi: LanguageDetails::new("hàn lộ", "hàn lộ"),
|
||||
zh_cn: LanguageDetails::new("寒露", "hánlù"),
|
||||
zh_tw: LanguageDetails::new("寒露", "hánlù"),
|
||||
},
|
||||
angle: 195,
|
||||
},
|
||||
// 霜降 (shuangjiang)
|
||||
SolarTerm {
|
||||
id: 18,
|
||||
name: Language {
|
||||
en: "shuanjiang".into(),
|
||||
ja: LanguageDetails::new("霜降", "soukou"),
|
||||
ja2: LanguageDetails::new("そうこう", "soukou"),
|
||||
vi: LanguageDetails::new("sương giáng", "sương giáng"),
|
||||
zh_cn: LanguageDetails::new("霜降", "shuāngjiàng"),
|
||||
zh_tw: LanguageDetails::new("", ""),
|
||||
},
|
||||
angle: 210,
|
||||
},
|
||||
// 立冬 (lidong)
|
||||
SolarTerm {
|
||||
id: 19,
|
||||
name: Language {
|
||||
en: "lidong".into(),
|
||||
ja: LanguageDetails::new("立冬", "rittou"),
|
||||
ja2: LanguageDetails::new("りっとう", "rittou"),
|
||||
vi: LanguageDetails::new("lập đông", "lập đông"),
|
||||
zh_cn: LanguageDetails::new("立冬", "lìdōng"),
|
||||
zh_tw: LanguageDetails::new("立冬", "lìdōng"),
|
||||
},
|
||||
angle: 225,
|
||||
},
|
||||
// 小雪 (xiaoxue)
|
||||
SolarTerm {
|
||||
id: 20,
|
||||
name: Language {
|
||||
en: "xiaoxue".into(),
|
||||
ja: LanguageDetails::new("小雪", "shousetsu"),
|
||||
ja2: LanguageDetails::new("しょうせつ", "shousetsu"),
|
||||
vi: LanguageDetails::new("tiểu tuyết", "tiểu tuyết"),
|
||||
zh_cn: LanguageDetails::new("小雪", "xiǎoxuě"),
|
||||
zh_tw: LanguageDetails::new("小雪", "xiǎoxuě"),
|
||||
},
|
||||
angle: 240,
|
||||
},
|
||||
// 大雪 (daxue)
|
||||
SolarTerm {
|
||||
id: 21,
|
||||
name: Language {
|
||||
en: "daxue".into(),
|
||||
ja: LanguageDetails::new("大雪", "taisetsu"),
|
||||
ja2: LanguageDetails::new("たいせつ", "taisetsu"),
|
||||
vi: LanguageDetails::new("đại tuyết", "đại tuyết"),
|
||||
zh_cn: LanguageDetails::new("大雪", "dàxuě"),
|
||||
zh_tw: LanguageDetails::new("大雪", "dàxuě"),
|
||||
},
|
||||
angle: 255,
|
||||
},
|
||||
// 冬至 (dongzhi)
|
||||
SolarTerm {
|
||||
id: 22,
|
||||
name: Language {
|
||||
en: "dongzhi".into(),
|
||||
ja: LanguageDetails::new("冬至", "touji"),
|
||||
ja2: LanguageDetails::new("とうじ", "touji"),
|
||||
vi: LanguageDetails::new("Đông chí", "Đông chí"),
|
||||
zh_cn: LanguageDetails::new("冬至", "dōngzhì"),
|
||||
zh_tw: LanguageDetails::new("冬至", "dōngzhì"),
|
||||
},
|
||||
angle: 270,
|
||||
},
|
||||
// 小寒 (xiaohan)
|
||||
SolarTerm {
|
||||
id: 23,
|
||||
name: Language {
|
||||
en: "xiaohan".into(),
|
||||
ja: LanguageDetails::new("小寒", "shoukan"),
|
||||
ja2: LanguageDetails::new("しょうかん", "shoukan"),
|
||||
vi: LanguageDetails::new("tiểu hàn", "tiểu hàn"),
|
||||
zh_cn: LanguageDetails::new("小寒", "xiǎohán"),
|
||||
zh_tw: LanguageDetails::new("小寒", "xiǎohán"),
|
||||
},
|
||||
angle: 285,
|
||||
},
|
||||
// 大寒 (dahan)
|
||||
SolarTerm {
|
||||
id: 24,
|
||||
name: Language {
|
||||
en: "dahan".into(),
|
||||
ja: LanguageDetails::new("大寒", "daikan"),
|
||||
ja2: LanguageDetails::new("だいかん", "daikan"),
|
||||
vi: LanguageDetails::new("Đại hàn", "Đại hàn"),
|
||||
zh_cn: LanguageDetails::new("大寒", "dàhán"),
|
||||
zh_tw: LanguageDetails::new("大寒", "dàhán"),
|
||||
},
|
||||
angle: 300,
|
||||
},
|
||||
];
|
||||
pub static ref SOLAR_TERMS: Vec<SolarTerm> = {
|
||||
let json = &include_str!("../json/solar_terms.json");
|
||||
let data: Vec<SolarTermData> = match serde_json::from_str(json) {
|
||||
Ok(json) => json,
|
||||
Err(err) => panic!("Error: {}", err),
|
||||
};
|
||||
data.iter().map(|item| {
|
||||
let item = item.clone();
|
||||
SolarTerm {
|
||||
id: item.id,
|
||||
name: Language {
|
||||
en: item.name.en,
|
||||
ja: LanguageDetails::new(&item.name.ja[0], &item.name.ja[1]),
|
||||
ja2: LanguageDetails::new(&item.name.ja2[0], &item.name.ja2[1]),
|
||||
vi: LanguageDetails::new(&item.name.vi[0], &item.name.vi[1]),
|
||||
zh_cn: LanguageDetails::new(&item.name.zh_cn[0], &item.name.zh_cn[1]),
|
||||
zh_tw: LanguageDetails::new(&item.name.zh_tw[0], &item.name.zh_tw[1]),
|
||||
},
|
||||
angle: item.angle,
|
||||
}
|
||||
}).collect()
|
||||
};
|
||||
|
||||
// Combination of Stems (10) and Branches (12) which makes 60 patterns.
|
||||
pub static ref GANZHI_SEXAGESIMAL: Vec<(usize, usize)> = {
|
||||
@@ -329,275 +68,50 @@ lazy_static! {
|
||||
v
|
||||
};
|
||||
|
||||
pub static ref STEMS: Vec<Stem> = vec![
|
||||
// 甲 (jia)
|
||||
Stem {
|
||||
no: 1,
|
||||
name: Language {
|
||||
en: "jia".into(),
|
||||
ja: LanguageDetails::new("きのえ", "kinoe"),
|
||||
ja2: LanguageDetails::new("コウ", "kou"),
|
||||
vi: LanguageDetails::new("giáp", "giap"),
|
||||
zh_cn: LanguageDetails::new("甲", "jiǎ"),
|
||||
zh_tw: LanguageDetails::new("甲", "jiǎ"),
|
||||
},
|
||||
},
|
||||
// 乙 (yi)
|
||||
Stem {
|
||||
no: 2,
|
||||
name: Language {
|
||||
en: "yi".into(),
|
||||
ja: LanguageDetails::new("きのと", "kinoto"),
|
||||
ja2: LanguageDetails::new("オツ", "otsu"),
|
||||
vi: LanguageDetails::new("ất", "ất"),
|
||||
zh_cn: LanguageDetails::new("乙", "yǐ"),
|
||||
zh_tw: LanguageDetails::new("乙", "yǐ"),
|
||||
},
|
||||
},
|
||||
// 丙 (bing)
|
||||
Stem {
|
||||
no: 3,
|
||||
name: Language {
|
||||
en: "bing".into(),
|
||||
ja: LanguageDetails::new("ひのえ", "hinoe"),
|
||||
ja2: LanguageDetails::new("ヘイ", "hei"),
|
||||
vi: LanguageDetails::new("bính", "bính"),
|
||||
zh_cn: LanguageDetails::new("丙", "bǐng"),
|
||||
zh_tw: LanguageDetails::new("丙", "bǐng"),
|
||||
},
|
||||
},
|
||||
// 丁 (ding)
|
||||
Stem {
|
||||
no: 4,
|
||||
name: Language {
|
||||
en: "ding".into(),
|
||||
ja: LanguageDetails::new("ひのと", "hinoto"),
|
||||
ja2: LanguageDetails::new("テイ", "tei"),
|
||||
vi: LanguageDetails::new("đinh", "đinh"),
|
||||
zh_cn: LanguageDetails::new("丁", "dīng"),
|
||||
zh_tw: LanguageDetails::new("丁", "dīng"),
|
||||
},
|
||||
},
|
||||
// 戊 (wu)
|
||||
Stem {
|
||||
no: 5,
|
||||
name: Language {
|
||||
en: "wu".into(),
|
||||
ja: LanguageDetails::new("つちのえ", "tsuchinoe"),
|
||||
ja2: LanguageDetails::new("ボ", "bo"),
|
||||
vi: LanguageDetails::new("mậu", "mậu"),
|
||||
zh_cn: LanguageDetails::new("戊", "wù"),
|
||||
zh_tw: LanguageDetails::new("戊", "wù"),
|
||||
},
|
||||
},
|
||||
// 己 (ji)
|
||||
Stem {
|
||||
no: 6,
|
||||
name: Language {
|
||||
en: "ji".into(),
|
||||
ja: LanguageDetails::new("つちのと", "tsuchinoe"),
|
||||
ja2: LanguageDetails::new("キ", "ki"),
|
||||
vi: LanguageDetails::new("kỷ", "kỷ"),
|
||||
zh_cn: LanguageDetails::new("己", "jǐ"),
|
||||
zh_tw: LanguageDetails::new("己", "jǐ"),
|
||||
},
|
||||
},
|
||||
// 庚 (geng)
|
||||
Stem {
|
||||
no: 7,
|
||||
name: Language {
|
||||
en: "geng".into(),
|
||||
ja: LanguageDetails::new("かのえ", "kanoe"),
|
||||
ja2: LanguageDetails::new("コウ", "kou"),
|
||||
vi: LanguageDetails::new("canh", "canh"),
|
||||
zh_cn: LanguageDetails::new("庚", "gēng"),
|
||||
zh_tw: LanguageDetails::new("庚", "gēng"),
|
||||
},
|
||||
},
|
||||
// 辛 (xin)
|
||||
Stem {
|
||||
no: 8,
|
||||
name: Language {
|
||||
en: "xin".into(),
|
||||
ja: LanguageDetails::new("かのと", "kanoto"),
|
||||
ja2: LanguageDetails::new("シン", "shin"),
|
||||
vi: LanguageDetails::new("tân", "tân"),
|
||||
zh_cn: LanguageDetails::new("辛", "xīn"),
|
||||
zh_tw: LanguageDetails::new("辛", "xīn"),
|
||||
},
|
||||
},
|
||||
// 壬 (ren)
|
||||
Stem {
|
||||
no: 9,
|
||||
name: Language {
|
||||
en: "ren".into(),
|
||||
ja: LanguageDetails::new("みずのえ", "mizunoe"),
|
||||
ja2: LanguageDetails::new("ジン", "jin"),
|
||||
vi: LanguageDetails::new("nhâm", "nhâm"),
|
||||
zh_cn: LanguageDetails::new("壬", "rén"),
|
||||
zh_tw: LanguageDetails::new("壬", "rén"),
|
||||
},
|
||||
},
|
||||
// 癸 (gui)
|
||||
Stem {
|
||||
no: 10,
|
||||
name: Language {
|
||||
en: "gui".into(),
|
||||
ja: LanguageDetails::new("みずのと", "mizunoto"),
|
||||
ja2: LanguageDetails::new("キ", "ki"),
|
||||
vi: LanguageDetails::new("quý", "quý"),
|
||||
zh_cn: LanguageDetails::new("癸", "guǐ"),
|
||||
zh_tw: LanguageDetails::new("癸", "guǐ"),
|
||||
},
|
||||
},
|
||||
];
|
||||
pub static ref STEMS: Vec<Stem> = {
|
||||
let json = &include_str!("../json/ganzhi_stems.json");
|
||||
let data: Vec<StemData> = match serde_json::from_str(json) {
|
||||
Ok(json) => json,
|
||||
Err(err) => panic!("Error: {}", err),
|
||||
};
|
||||
data.iter().map(|item| {
|
||||
let item = item.clone();
|
||||
Stem {
|
||||
no: item.no,
|
||||
name: Language {
|
||||
en: item.name.en,
|
||||
ja: LanguageDetails::new(&item.name.ja[0], &item.name.ja[1]),
|
||||
ja2: LanguageDetails::new(&item.name.ja2[0], &item.name.ja2[1]),
|
||||
vi: LanguageDetails::new(&item.name.vi[0], &item.name.vi[1]),
|
||||
zh_cn: LanguageDetails::new(&item.name.zh_cn[0], &item.name.zh_cn[1]),
|
||||
zh_tw: LanguageDetails::new(&item.name.zh_tw[0], &item.name.zh_tw[1]),
|
||||
},
|
||||
}
|
||||
}).collect()
|
||||
};
|
||||
|
||||
pub static ref BRANCHES: Vec<Branch> = vec![
|
||||
// 子 (zi)
|
||||
Branch {
|
||||
no: 1,
|
||||
name: Language {
|
||||
en: "zi".into(),
|
||||
ja: LanguageDetails::new("ね", "ne"),
|
||||
ja2: LanguageDetails::new("し", "shi"),
|
||||
vi: LanguageDetails::new("tí", "tí"),
|
||||
zh_cn: LanguageDetails::new("子", "zǐ"),
|
||||
zh_tw: LanguageDetails::new("子", "zǐ"),
|
||||
},
|
||||
},
|
||||
// 丑 (chou)
|
||||
Branch {
|
||||
no: 2,
|
||||
name: Language {
|
||||
en: "chou".into(),
|
||||
ja: LanguageDetails::new("うし", "ushi"),
|
||||
ja2: LanguageDetails::new("ちゅう", "chu"),
|
||||
vi: LanguageDetails::new("sửu", "sửu"),
|
||||
zh_cn: LanguageDetails::new("丑", "chǒu"),
|
||||
zh_tw: LanguageDetails::new("丑", "chǒu"),
|
||||
},
|
||||
},
|
||||
// 寅 (yin)
|
||||
Branch {
|
||||
no: 3,
|
||||
name: Language {
|
||||
en: "".into(),
|
||||
ja: LanguageDetails::new("とら", "tora"),
|
||||
ja2: LanguageDetails::new("いん", "in"),
|
||||
vi: LanguageDetails::new("dần", "dần"),
|
||||
zh_cn: LanguageDetails::new("寅", "yín"),
|
||||
zh_tw: LanguageDetails::new("寅", "yín"),
|
||||
},
|
||||
},
|
||||
// 卯 (mao)
|
||||
Branch {
|
||||
no: 4,
|
||||
name: Language {
|
||||
en: "mao".into(),
|
||||
ja: LanguageDetails::new("う", "u"),
|
||||
ja2: LanguageDetails::new("ぼう", "bou"),
|
||||
vi: LanguageDetails::new("mão", "mão"),
|
||||
zh_cn: LanguageDetails::new("卯", "mǎo"),
|
||||
zh_tw: LanguageDetails::new("卯", "mǎo"),
|
||||
},
|
||||
},
|
||||
// 辰 (chen)
|
||||
Branch {
|
||||
no: 5,
|
||||
name: Language {
|
||||
en: "".into(),
|
||||
ja: LanguageDetails::new("たつ", "tatsu"),
|
||||
ja2: LanguageDetails::new("しん", "shin"),
|
||||
vi: LanguageDetails::new("thần", "thần"),
|
||||
zh_cn: LanguageDetails::new("辰", "chén"),
|
||||
zh_tw: LanguageDetails::new("辰", "chén"),
|
||||
},
|
||||
},
|
||||
// 巳 (si)
|
||||
Branch {
|
||||
no: 6,
|
||||
name: Language {
|
||||
en: "si".into(),
|
||||
ja: LanguageDetails::new("み", "mi"),
|
||||
ja2: LanguageDetails::new("し", "shi"),
|
||||
vi: LanguageDetails::new("tị", "tị"),
|
||||
zh_cn: LanguageDetails::new("巳", "sì"),
|
||||
zh_tw: LanguageDetails::new("巳", "sì"),
|
||||
},
|
||||
},
|
||||
// 午 (wu)
|
||||
Branch {
|
||||
no: 7,
|
||||
name: Language {
|
||||
en: "wu".into(),
|
||||
ja: LanguageDetails::new("うま", "uma"),
|
||||
ja2: LanguageDetails::new("ご", "go"),
|
||||
vi: LanguageDetails::new("ngọ", "ngọ"),
|
||||
zh_cn: LanguageDetails::new("午", "wǔ"),
|
||||
zh_tw: LanguageDetails::new("午", "wǔ"),
|
||||
},
|
||||
},
|
||||
// 未 (wei)
|
||||
Branch {
|
||||
no: 8,
|
||||
name: Language {
|
||||
en: "wei".into(),
|
||||
ja: LanguageDetails::new("ひつじ", "hitsuji"),
|
||||
ja2: LanguageDetails::new("び", "bi"),
|
||||
vi: LanguageDetails::new("vị", "vị"),
|
||||
zh_cn: LanguageDetails::new("未", "wèi"),
|
||||
zh_tw: LanguageDetails::new("未", "wèi"),
|
||||
},
|
||||
},
|
||||
// 申 (shen)
|
||||
Branch {
|
||||
no: 9,
|
||||
name: Language {
|
||||
en: "shen".into(),
|
||||
ja: LanguageDetails::new("さる", "saru"),
|
||||
ja2: LanguageDetails::new("しん", "shin"),
|
||||
vi: LanguageDetails::new("thân", "thân"),
|
||||
zh_cn: LanguageDetails::new("申", "shēn"),
|
||||
zh_tw: LanguageDetails::new("申", "shēn"),
|
||||
},
|
||||
},
|
||||
// 酉 (you)
|
||||
Branch {
|
||||
no: 10,
|
||||
name: Language {
|
||||
en: "you".into(),
|
||||
ja: LanguageDetails::new("とり", "tori"),
|
||||
ja2: LanguageDetails::new("ゆう", "yuu"),
|
||||
vi: LanguageDetails::new("dậu", "dậu"),
|
||||
zh_cn: LanguageDetails::new("酉", "yǒu"),
|
||||
zh_tw: LanguageDetails::new("酉", "yǒu"),
|
||||
},
|
||||
},
|
||||
// 戌 (xu)
|
||||
Branch {
|
||||
no: 11,
|
||||
name: Language {
|
||||
en: "xu".into(),
|
||||
ja: LanguageDetails::new("いぬ", "inu"),
|
||||
ja2: LanguageDetails::new("じゅつ", "jutsu"),
|
||||
vi: LanguageDetails::new("tuất", "tuất"),
|
||||
zh_cn: LanguageDetails::new("戌", "xū"),
|
||||
zh_tw: LanguageDetails::new("戌", "xū"),
|
||||
},
|
||||
},
|
||||
// 亥 (hai)
|
||||
Branch {
|
||||
no: 12,
|
||||
name: Language {
|
||||
en: "hai".into(),
|
||||
ja: LanguageDetails::new("い", "i"),
|
||||
ja2: LanguageDetails::new("がい", "gai"),
|
||||
vi: LanguageDetails::new("hợi", "hợi"),
|
||||
zh_cn: LanguageDetails::new("亥", "hài"),
|
||||
zh_tw: LanguageDetails::new("亥", "hài"),
|
||||
},
|
||||
},
|
||||
];
|
||||
pub static ref BRANCHES: Vec<Branch> = {
|
||||
let json = &include_str!("../json/ganzhi_branches.json");
|
||||
let data: Vec<BranchData> = match serde_json::from_str(json) {
|
||||
Ok(json) => json,
|
||||
Err(err) => panic!("Error: {}", err),
|
||||
};
|
||||
|
||||
data.iter().map(|item| {
|
||||
let item = item.clone();
|
||||
Branch {
|
||||
no: item.no,
|
||||
name: Language {
|
||||
en: item.name.en,
|
||||
ja: LanguageDetails::new(&item.name.ja[0], &item.name.ja[1]),
|
||||
ja2: LanguageDetails::new(&item.name.ja2[0], &item.name.ja2[1]),
|
||||
vi: LanguageDetails::new(&item.name.vi[0], &item.name.vi[1]),
|
||||
zh_cn: LanguageDetails::new(&item.name.zh_cn[0], &item.name.zh_cn[1]),
|
||||
zh_tw: LanguageDetails::new(&item.name.zh_tw[0], &item.name.zh_tw[1]),
|
||||
},
|
||||
}
|
||||
}).collect()
|
||||
};
|
||||
|
||||
/// This is a table used when finding Hour Stem.
|
||||
/// Columns represents Day Stem groups, and there are 5 groups.
|
||||
|
||||
@@ -1,23 +1,13 @@
|
||||
#[cfg(test)]
|
||||
use sowngwala::time::Month;
|
||||
|
||||
use serde::{ Deserialize, Serialize };
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sowngwala::time::{
|
||||
Date,
|
||||
Time,
|
||||
DateTime,
|
||||
julian_day,
|
||||
julian_day_from_ut,
|
||||
modified_julian_day_from_ut,
|
||||
julian_day, julian_day_from_ut, modified_julian_day_from_ut, Date, DateTime, Time,
|
||||
};
|
||||
|
||||
use crate::constants::{
|
||||
HOUR_STEM_TABLE,
|
||||
GANZHI_SEXAGESIMAL,
|
||||
STEMS,
|
||||
BRANCHES,
|
||||
};
|
||||
use crate::language::{ Language, LanguageTrait };
|
||||
use crate::constants::{BRANCHES, GANZHI_SEXAGESIMAL, HOUR_STEM_TABLE, STEMS};
|
||||
use crate::language::{Language, LanguageTrait};
|
||||
use crate::solar_terms::get_lichun;
|
||||
use crate::time::ut_from_local;
|
||||
use crate::utils::longitude_of_the_sun_from_date;
|
||||
@@ -64,41 +54,24 @@ impl GanZhi<'_> {
|
||||
/// Concatenate Stem & Branch (for Chinese characters)
|
||||
#[allow(dead_code)]
|
||||
fn alphabet(&self) -> String {
|
||||
format!(
|
||||
"{}{}",
|
||||
self.stem.alphabet(),
|
||||
self.branch.alphabet()
|
||||
)
|
||||
format!("{}{}", self.stem.alphabet(), self.branch.alphabet())
|
||||
}
|
||||
|
||||
/// Concatenate Stem & Branch (for Chinese phonetics)
|
||||
#[allow(dead_code)]
|
||||
fn phonetic(&self) -> String {
|
||||
format!(
|
||||
"{} {}",
|
||||
self.stem.phonetic(),
|
||||
self.branch.phonetic()
|
||||
)
|
||||
format!("{} {}", self.stem.phonetic(), self.branch.phonetic())
|
||||
}
|
||||
|
||||
/// Concatenate Stem & Branch (for Japanese characters)
|
||||
#[allow(dead_code)]
|
||||
fn alphabet_ja(&self) -> String {
|
||||
format!(
|
||||
"{}・{}",
|
||||
self.stem.alphabet_ja(),
|
||||
self.branch.alphabet_ja()
|
||||
)
|
||||
format!("{}・{}", self.stem.alphabet_ja(), self.branch.alphabet_ja())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Bazi<'a> {
|
||||
fn new(
|
||||
year: GanZhi<'a>,
|
||||
month: GanZhi<'a>,
|
||||
day: GanZhi<'a>,
|
||||
hour: GanZhi<'a>
|
||||
) -> Self {
|
||||
fn new(year: GanZhi<'a>, month: GanZhi<'a>, day: GanZhi<'a>, hour: GanZhi<'a>) -> Self {
|
||||
Bazi {
|
||||
year,
|
||||
month,
|
||||
@@ -224,7 +197,7 @@ fn _month_ganzhi(ut: Box<DateTime>, year_stem_no: u8) -> GanZhi<'static> {
|
||||
fn _day_ganzhi(ut: Box<DateTime>) -> GanZhi<'static> {
|
||||
let mjd: f64 = modified_julian_day_from_ut(&*ut);
|
||||
let index = ((mjd - 10.0) % 60.0).floor() as usize;
|
||||
|
||||
|
||||
let (stem_id, branch_id) = GANZHI_SEXAGESIMAL[index];
|
||||
|
||||
GanZhi {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use serde::{ Deserialize, Serialize };
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct LanguageDetails {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use sowngwala::time::{ Month, Date, add_date };
|
||||
use sowngwala::time::{add_date, Date, Month};
|
||||
|
||||
use crate::language::{ Language, LanguageTrait };
|
||||
use crate::language::{Language, LanguageTrait};
|
||||
use crate::utils::longitude_of_the_sun_from_date;
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -48,7 +48,11 @@ pub fn get_last_term(date: &Date) -> (f64, Date) {
|
||||
/// * `date` - &Date
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn get_lichun(year: i16) -> Date {
|
||||
let d: Date = Date { year, month: Month::Feb, day: 6.0 };
|
||||
let d: Date = Date {
|
||||
year,
|
||||
month: Month::Feb,
|
||||
day: 6.0,
|
||||
};
|
||||
let (_lng, lichun) = get_last_term(&d);
|
||||
lichun
|
||||
}
|
||||
|
||||
10
src/time.rs
10
src/time.rs
@@ -1,13 +1,8 @@
|
||||
#[cfg(test)]
|
||||
extern crate approx_eq;
|
||||
|
||||
pub use sowngwala::time::{
|
||||
Month,
|
||||
Date,
|
||||
Time,
|
||||
DateTime,
|
||||
};
|
||||
use sowngwala::time::eot_fortified_ut_from_local;
|
||||
pub use sowngwala::time::{Date, DateTime, Month, Time};
|
||||
|
||||
pub fn ut_from_local(&dt: &DateTime, zone: i8) -> DateTime {
|
||||
eot_fortified_ut_from_local(&dt, zone)
|
||||
@@ -41,8 +36,7 @@ mod tests {
|
||||
assert_eq!(ut.min, 57);
|
||||
assert_approx_eq!(
|
||||
ut.sec, // 17.137797474861145,
|
||||
17.13779,
|
||||
1e-6
|
||||
17.13779, 1e-6
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use sowngwala::time::Date;
|
||||
use sowngwala::sun::ecliptic_position_of_the_sun_from_date;
|
||||
use sowngwala::time::Date;
|
||||
|
||||
pub fn longitude_of_the_sun_from_date(date: &Date) -> f64 {
|
||||
ecliptic_position_of_the_sun_from_date(&date).lng
|
||||
|
||||
Reference in New Issue
Block a user