Documentation
use cosmwasm_schema::cw_serde;
use cosmwasm_std::Decimal;
use rhaki_cw_plus::serde_value::IntoSerdeJsonString;

pub const YEAR_IN_SECONDS: u64 = 31_536_000;

#[cw_serde]
pub enum PriceType {
    Oracle,
    Fix { ratio: Decimal },
}

impl IntoSerdeJsonString for PriceType {}

#[cw_serde]
pub enum AssetType {
    Token,
    Cw20,
}

#[cw_serde]
pub enum UpdateOption<T> {
    ToNone,
    Some(T),
}

impl<T: Clone> UpdateOption<T> {
    pub fn into_option(&self) -> Option<T> {
        match self {
            UpdateOption::ToNone => None,
            UpdateOption::Some(t) => Some(t.clone()),
        }
    }

    pub fn unwrap(self) -> T {
        match self {
            UpdateOption::ToNone => panic!("Unwrap a None value"),
            UpdateOption::Some(val) => val,
        }
    }
}

#[allow(clippy::from_over_into)]
impl<T> Into<Option<T>> for UpdateOption<T> {
    fn into(self) -> Option<T> {
        match self {
            UpdateOption::ToNone => None,
            UpdateOption::Some(val) => Some(val),
        }
    }
}