use crate::Canonical;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[non_exhaustive]
pub enum MarketState {
Pre,
Regular,
Post,
#[default]
Closed,
Halted,
Suspended,
Auction,
Other(Canonical),
}
crate::string_enum_with_code!(
MarketState, Other,
"MarketState",
{
"PREMARKET" => MarketState::Pre,
"REGULAR" => MarketState::Regular,
"POSTMARKET" => MarketState::Post,
"CLOSED" => MarketState::Closed,
"HALTED" => MarketState::Halted,
"SUSPENDED" => MarketState::Suspended,
"AUCTION" => MarketState::Auction
},
{
"PRE" => MarketState::Pre,
"POST" => MarketState::Post,
"OPEN" => MarketState::Regular,
"PREOPEN" => MarketState::Pre,
"PRE_OPEN" => MarketState::Pre,
"PRE_MARKET" => MarketState::Pre,
"REGULAR_MARKET" => MarketState::Regular,
"POST_MARKET" => MarketState::Post,
}
);
crate::impl_display_via_code!(MarketState);
impl MarketState {
#[must_use]
pub fn full_name(&self) -> &str {
match self {
Self::Pre => "Pre-market",
Self::Regular => "Regular session",
Self::Post => "Post-market",
Self::Closed => "Closed",
Self::Halted => "Halted",
Self::Suspended => "Suspended",
Self::Auction => "Auction",
Self::Other(code) => code.as_ref(),
}
}
#[must_use]
pub const fn is_trading(&self) -> bool {
matches!(self, Self::Pre | Self::Regular | Self::Post)
}
}