x-iztro 0.2.0

Zi Wei Dou Shu (Purple Star Astrology) chart engine, field-for-field identical to iztro
Documentation
use crate::data::stars::StarKey;
use crate::data::types::*;

/// 星耀名称
pub fn star_name(key: StarKey) -> &'static str {
    match key {
        StarKey::ZiweiMaj => "Tử Vi",
        StarKey::TianjiMaj => "Thiên Cơ",
        StarKey::TaiyangMaj => "Thái Dương",
        StarKey::WuquMaj => "Vũ Khúc",
        StarKey::TiantongMaj => "Thiên Đồng",
        StarKey::LianzhenMaj => "Liêm Trinh",
        StarKey::TianfuMaj => "Thiên Phủ",
        StarKey::TaiyinMaj => "Thái Âm",
        StarKey::TanlangMaj => "Tham Lang",
        StarKey::JumenMaj => "Cự Môn",
        StarKey::TianxiangMaj => "Thiên Tướng",
        StarKey::TianliangMaj => "Thiên Lương",
        StarKey::QishaMaj => "Thất Sát",
        StarKey::PojunMaj => "Phá Quân",
        StarKey::ZuofuMin => "Tả Phù",
        StarKey::YoubiMin => "Hữu Bật",
        StarKey::WenchangMin => "Văn Xương",
        StarKey::WenquMin => "Văn Khúc",
        StarKey::LucunMin => "Lộc Tồn",
        StarKey::TianmaMin => "Thiên Mã",
        StarKey::QingyangMin => "Kình Dương",
        StarKey::TuoluoMin => "Đà La",
        StarKey::HuoxingMin => "Hỏa Tinh",
        StarKey::LingxingMin => "Linh Tinh",
        StarKey::TiankuiMin => "Thiên Khôi",
        StarKey::TianyueMin => "Thiên Việt",
        StarKey::DikongMin => "Địa Không",
        StarKey::DijieMin => "Địa Kiếp",
        StarKey::JieshaAdj => "Kiếp Sát",
        StarKey::Tiankong => "Thiên Không",
        StarKey::Tianxing => "Thiên Hình",
        StarKey::Tianyao => "Thiên Diêu",
        StarKey::Jieshen => "Giải Thần",
        StarKey::Yinsha => "Âm Sát",
        StarKey::Tianxi => "Thiên Hỷ",
        StarKey::Tianguan => "Thiên Quan",
        StarKey::Tianfu => "Thiên Phúc",
        StarKey::Tianku => "Thiên Khốc",
        StarKey::Tianxu => "Thiên Hư",
        StarKey::Longchi => "Long Trì",
        StarKey::Fengge => "Phụng Các",
        StarKey::Hongluan => "Hồng Loan",
        StarKey::Guchen => "Cô Thần",
        StarKey::Guasu => "Quả Tú",
        StarKey::Feilian => "Phi Liêm",
        StarKey::Posui => "Phá Toái",
        StarKey::Taifu => "Đài Phụ",
        StarKey::Fenggao => "Phong Cáo",
        StarKey::Tianwu => "Thiên Vu",
        StarKey::Tianyue2 => "Thiên Nguyệt",
        StarKey::Santai => "Tam Thai",
        StarKey::Bazuo => "Bát Tọa",
        StarKey::Engguang => "Ân Quang",
        StarKey::Tiangui => "Thiên Quý",
        StarKey::Tiancai => "Thiên Tài",
        StarKey::Tianshou => "Thiên Thọ",
        StarKey::Jiekong => "Triệt Không",
        StarKey::Xunzhong => "Tuần Trung",
        StarKey::Xunkong => "Tuần Không",
        StarKey::Kongwang => "Không Vong",
        StarKey::Jielu => "Triệt Lộ",
        StarKey::Yuede => "Nguyệt Đức",
        StarKey::Tianshang => "Thiên Thương",
        StarKey::Tianshi => "Thiên Sứ",
        StarKey::Tianchu => "Thiên Trù",
        StarKey::Changsheng => "Trường Sinh",
        StarKey::Muyu => "Mục Dục",
        StarKey::Guandai => "Quan Đới",
        StarKey::Linguan => "Lâm Quan",
        StarKey::Diwang => "Đế Vượng",
        StarKey::Shuai => "Suy",
        StarKey::Bing => "Bệnh",
        StarKey::Si => "Tử",
        StarKey::Mu => "Mộ",
        StarKey::Jue => "Tuyệt",
        StarKey::Tai => "Thai",
        StarKey::Yang => "Dưỡng",
        StarKey::Boshi => "Bác Sỹ",
        StarKey::Lishi => "Lực Sỹ",
        StarKey::Qinglong => "Thanh Long",
        StarKey::Xiaohao => "Tiểu Hao",
        StarKey::Jiangjun => "Tướng Quân",
        StarKey::Zhoushu => "Tấu Thư",
        StarKey::Faylian => "Phi Liêm",
        StarKey::Xishen => "Hỷ Thần",
        StarKey::Bingfu => "Bệnh Phù",
        StarKey::Dahao => "Đại Hao",
        StarKey::Suipo => "Tuế Phá",
        StarKey::Fubing => "Phục Binh",
        StarKey::Guanfu => "Quan Phủ",
        StarKey::Suijian => "Tuế Kiện",
        StarKey::Huiqi => "Hối Khí",
        StarKey::Sangmen => "Tang Môn",
        StarKey::Guansuo => "Quán Tác",
        StarKey::Gwanfu => "Quan Phù",
        StarKey::Longde => "Long Đức",
        StarKey::Baihu => "Bạch Hổ",
        StarKey::Tiande => "Thiên Đức",
        StarKey::Diaoke => "Điếu Khách",
        StarKey::Jiangxing => "Tướng Tinh",
        StarKey::Panan => "Phan Án",
        StarKey::Suiyi => "Tuế Dịch",
        StarKey::Xiishen => "Tức Thần",
        StarKey::Huagai => "Hoa Cái",
        StarKey::Jiesha => "Kiếp Sát",
        StarKey::Zhaisha => "Tai Sát",
        StarKey::Tiansha => "Thiên Sát",
        StarKey::Zhibei => "Chỉ Bối",
        StarKey::Xianchi => "Hàm Trì",
        StarKey::Yuesha => "Nguyệt Sát",
        StarKey::Wangshen => "Vong Thần",
        StarKey::Yunkui => "Vận Khôi",
        StarKey::Yunyue => "Vận Việt",
        StarKey::Yunchang => "Vận Xương",
        StarKey::Yunqu => "Vận Khúc",
        StarKey::Yunluan => "Vận Loan",
        StarKey::Yunxi => "Vận Hỷ",
        StarKey::Yunlu => "Vận Lộc",
        StarKey::Yunyang => "Vận Dương",
        StarKey::Yuntuo => "Vận Đà",
        StarKey::Yunma => "Vận Mã",
        StarKey::Liukui => "Lưu Khôi",
        StarKey::Liuyue => "Lưu Việt",
        StarKey::Liuchang => "Lưu Xương",
        StarKey::Liuqu => "Lưu Khúc",
        StarKey::Liuluan => "Lưu Loan",
        StarKey::Liuxi => "Lưu Hỷ",
        StarKey::Liulu => "Lưu Lộc",
        StarKey::Liuyang => "Lưu Dương",
        StarKey::Liutuo => "Lưu Đà",
        StarKey::Liuma => "Lưu Mã",
        StarKey::Nianjie => "Niên Giải",
        StarKey::Yuekui => "Thiên Khôi(M)",
        StarKey::Yueyue => "Thiên Nguyệt(M)",
        StarKey::Yuechang => "Văn Xương(M)",
        StarKey::Yuequ => "Văn Khúc(M)",
        StarKey::Yueluan => "Hồng Loan(M)",
        StarKey::Yuexi => "Thiên Hỷ(M)",
        StarKey::Yuelu => "Lộc Tồn(M)",
        StarKey::Yueyang => "Kình Dương(M)",
        StarKey::Yuetuo => "Đà La(M)",
        StarKey::Yuema => "Thiên Mã(M)",
        StarKey::Rikui => "Thiên Khôi(d)",
        StarKey::Riyue => "Thiên Nguyệt(d)",
        StarKey::Richang => "Văn Xương(d)",
        StarKey::Riqu => "Văn Khúc(d)",
        StarKey::Riluan => "Hồng Loan(d)",
        StarKey::Rixi => "Thiên Hỷ(d)",
        StarKey::Rilu => "Lộc Tồn(d)",
        StarKey::Riyang => "Kình Dương(d)",
        StarKey::Rituo => "Đà La(d)",
        StarKey::Rima => "Thiên Mã(d)",
        StarKey::Shikui => "Thiên Khôi(H)",
        StarKey::Shiyue => "Thiên Nguyệt(H)",
        StarKey::Shichang => "Văn Xương(H)",
        StarKey::Shiqu => "Văn Khúc(H)",
        StarKey::Shiluan => "Hồng Loan(H)",
        StarKey::Shixi => "Thiên Hỷ(H)",
        StarKey::Shilu => "Lộc Tồn(H)",
        StarKey::Shiyang => "Kình Dương(H)",
        StarKey::Shituo => "Đà La(H)",
        StarKey::Shima => "Thiên Mã(H)",
    }
}

/// 宫位名称
pub fn palace_name(palace: Palace) -> &'static str {
    match palace {
        Palace::Soul => "Mệnh",
        Palace::Parents => "Phụ Mẫu",
        Palace::Spirit => "Phúc Đức",
        Palace::Property => "Điền Trạch",
        Palace::Career => "Quan Lộc",
        Palace::Friends => "Nô Bộc",
        Palace::Surface => "Thiên Di",
        Palace::Health => "Tật Ách",
        Palace::Wealth => "Tài Bạch",
        Palace::Children => "Tử Nữ",
        Palace::Spouse => "Phu Thê",
        Palace::Siblings => "Huynh Đệ",
    }
}

/// 天干名称
pub fn heavenly_stem_name(stem: HeavenlyStem) -> &'static str {
    match stem {
        HeavenlyStem::Jia => "Giáp",
        HeavenlyStem::Yi => "Ất",
        HeavenlyStem::Bing => "Bính",
        HeavenlyStem::Ding => "Đinh",
        HeavenlyStem::Wu => "Mậu",
        HeavenlyStem::Ji => "Kỷ",
        HeavenlyStem::Geng => "Canh",
        HeavenlyStem::Xin => "Tân",
        HeavenlyStem::Ren => "Nhâm",
        HeavenlyStem::Gui => "Quý",
    }
}

/// 地支名称
pub fn earthly_branch_name(branch: EarthlyBranch) -> &'static str {
    match branch {
        EarthlyBranch::Zi => "",
        EarthlyBranch::Chou => "Sửu",
        EarthlyBranch::Yin => "Dần",
        EarthlyBranch::Mao => "Mão",
        EarthlyBranch::Chen => "Thìn",
        EarthlyBranch::Si => "Tỵ",
        EarthlyBranch::Wu => "Ngọ",
        EarthlyBranch::Wei => "Mùi",
        EarthlyBranch::Shen => "Thân",
        EarthlyBranch::You => "Dậu",
        EarthlyBranch::Xu => "Tuất",
        EarthlyBranch::Hai => "Hợi",
    }
}

/// 亮度名称
pub fn brightness_name(b: Brightness) -> &'static str {
    match b {
        Brightness::Miao => "Miếu",
        Brightness::Wang => "Vượng",
        Brightness::De => "Đắc",
        Brightness::Li => "Lợi",
        Brightness::Ping => "Bình",
        Brightness::Bu => "Bất",
        Brightness::Xian => "Hạn",
    }
}

/// 四化名称
pub fn mutagen_name(m: Mutagen) -> &'static str {
    match m {
        Mutagen::Lu => "Lộc",
        Mutagen::Quan => "Quyền",
        Mutagen::Ke => "Khoa",
        Mutagen::Ji => "Kỵ",
    }
}

/// 五行局名称
pub fn five_elements_class_name(c: FiveElementsClass) -> &'static str {
    match c {
        FiveElementsClass::Water2nd => "Thủy Nhị Cục",
        FiveElementsClass::Wood3rd => "Mộc Tam Cục",
        FiveElementsClass::Metal4th => "Kim Tứ Cục",
        FiveElementsClass::Earth5th => "Thổ Ngũ Cục",
        FiveElementsClass::Fire6th => "Hỏa Lục Cục",
    }
}

/// 性别名称
pub fn gender_name(g: Gender) -> &'static str {
    match g {
        Gender::Male => "Nam",
        Gender::Female => "Nữ",
    }
}

/// Bảng tên giờ sinh (chỉ số 0-12: Giờ tý sớm … Giờ tý muộn).
const TIME_NAMES: [&str; 13] = [
    "Giờ tý sớm",
    "Giờ sửu",
    "Giờ dần",
    "Giờ mão",
    "Giờ thìn",
    "Giờ tỵ",
    "Giờ ngọ",
    "Giờ mùi",
    "Giờ thân",
    "Giờ dậu",
    "Giờ tuất",
    "Giờ hợi",
    "Giờ tý muộn",
];

/// Bảng tên cung hoàng đạo (chỉ số 0-11: Bạch Dương trở đi theo thứ tự hoàng đạo).
const SIGN_NAMES: [&str; 12] = [
    "Cung Bạch Dương",
    "Cung Kim Ngưu",
    "Cung Song Tử",
    "Cung Cự Giải",
    "Cung Sư Tử",
    "Cung Xử Nữ",
    "Cung Thiên Bình",
    "Cung Thiên Yết",
    "Cung Xạ Thủ",
    "Cung Ma Kết",
    "Cung Thủy Bình",
    "Cung Song Ngư",
];

/// Bảng tên con giáp (theo chỉ số địa chi: Tý=Chuột … Hợi=Lợn).
const ZODIAC_NAMES: [&str; 12] = [
    "Chuột", "Trâu", "Hổ", "Mèo", "Rồng", "Rắn", "Ngựa", "", "Khỉ", "", "Chó", "Lợn",
];

/// 时辰名称(索引 0-12)
pub fn time_name(time_index: u8) -> &'static str {
    TIME_NAMES[time_index as usize]
}

/// 星座名称(索引 0-11,白羊座起)
pub fn sign_name(sign_index: usize) -> &'static str {
    SIGN_NAMES[sign_index]
}

/// 生肖名称(按地支)
pub fn zodiac_name(branch: EarthlyBranch) -> &'static str {
    ZODIAC_NAMES[branch.index()]
}

/// 运限层级名称
pub fn horoscope_name(n: HoroscopeName) -> &'static str {
    match n {
        HoroscopeName::Decadal => "Đại Hạn",
        HoroscopeName::Childhood => "đứa trẻ Hạn",
        HoroscopeName::Age => "Tiểu Hạn",
        HoroscopeName::Yearly => "Lưu Niên",
        HoroscopeName::Monthly => "Lưu Nguyệt",
        HoroscopeName::Daily => "Lưu Nhật",
        HoroscopeName::Hourly => "Lưu Thì",
    }
}