use crate::core::model::ganzhi::StemBranch;
use crate::core::model::nayin::{NaYinElement, nayin_element};
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FiveElementBureau {
Water2,
Wood3,
Metal4,
Earth5,
Fire6,
}
impl FiveElementBureau {
pub const fn number(self) -> u8 {
match self {
Self::Water2 => 2,
Self::Wood3 => 3,
Self::Metal4 => 4,
Self::Earth5 => 5,
Self::Fire6 => 6,
}
}
pub const fn element(self) -> NaYinElement {
match self {
Self::Water2 => NaYinElement::Water,
Self::Wood3 => NaYinElement::Wood,
Self::Metal4 => NaYinElement::Metal,
Self::Earth5 => NaYinElement::Earth,
Self::Fire6 => NaYinElement::Fire,
}
}
pub const fn from_element(element: NaYinElement) -> Self {
match element {
NaYinElement::Water => Self::Water2,
NaYinElement::Wood => Self::Wood3,
NaYinElement::Metal => Self::Metal4,
NaYinElement::Earth => Self::Earth5,
NaYinElement::Fire => Self::Fire6,
}
}
}
pub fn five_element_bureau_from_life_palace(pair: StemBranch) -> FiveElementBureau {
FiveElementBureau::from_element(nayin_element(pair))
}