use std::collections::HashMap;
use once_cell::sync::Lazy;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EventId {
BosEventDetector,
CandlePattern,
Confluence,
CrossAssetBeta,
DirectionDetector,
Divergence,
FvgEventDetector,
LineCross,
OscillatorWithDivergence,
OscillatorWithVolumeWeight,
PairsCointegrationProxy,
Pivot,
PriceLineCross,
RegimeGate,
RelativePosition,
RelativeStrengthCross,
StatisticalWickDetector,
SwingDetection,
Threshold,
VolatilityRegimeDetector,
VolumeEventDetector,
}
impl EventId {
pub fn as_str(self) -> &'static str {
match self {
EventId::BosEventDetector => "BosEventDetector",
EventId::CandlePattern => "CandlePattern",
EventId::Confluence => "Confluence",
EventId::CrossAssetBeta => "CrossAssetBeta",
EventId::DirectionDetector => "DirectionDetector",
EventId::Divergence => "Divergence",
EventId::FvgEventDetector => "FvgEventDetector",
EventId::LineCross => "LineCross",
EventId::OscillatorWithDivergence => "OscillatorWithDivergence",
EventId::OscillatorWithVolumeWeight => "OscillatorWithVolumeWeight",
EventId::PairsCointegrationProxy => "PairsCointegrationProxy",
EventId::Pivot => "Pivot",
EventId::PriceLineCross => "PriceLineCross",
EventId::RegimeGate => "RegimeGate",
EventId::RelativePosition => "RelativePosition",
EventId::RelativeStrengthCross => "RelativeStrengthCross",
EventId::StatisticalWickDetector => "StatisticalWickDetector",
EventId::SwingDetection => "SwingDetection",
EventId::Threshold => "Threshold",
EventId::VolatilityRegimeDetector => "VolatilityRegimeDetector",
EventId::VolumeEventDetector => "VolumeEventDetector",
}
}
pub fn from_str(s: &str) -> Option<Self> {
EVENT_ID_MAP.get(s.to_lowercase().as_str()).copied()
}
}
impl std::fmt::Display for EventId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
pub static EVENT_ID_MAP: Lazy<HashMap<&'static str, EventId>> = Lazy::new(|| {
let mut m = HashMap::new();
m.insert("boseventdetector", EventId::BosEventDetector);
m.insert("bos_event_detector", EventId::BosEventDetector);
m.insert("bos", EventId::BosEventDetector);
m.insert("candlepattern", EventId::CandlePattern);
m.insert("candle_pattern", EventId::CandlePattern);
m.insert("candlepatterndetector", EventId::CandlePattern);
m.insert("candle_pattern_detector", EventId::CandlePattern);
m.insert("confluence", EventId::Confluence);
m.insert("crossassetbeta", EventId::CrossAssetBeta);
m.insert("cross_asset_beta", EventId::CrossAssetBeta);
m.insert("directiondetector", EventId::DirectionDetector);
m.insert("direction_detector", EventId::DirectionDetector);
m.insert("direction", EventId::DirectionDetector);
m.insert("divergence", EventId::Divergence);
m.insert("fvgeventdetector", EventId::FvgEventDetector);
m.insert("fvg_event_detector", EventId::FvgEventDetector);
m.insert("fvg", EventId::FvgEventDetector);
m.insert("linecross", EventId::LineCross);
m.insert("line_cross", EventId::LineCross);
m.insert("oscillatorwithdivergence", EventId::OscillatorWithDivergence);
m.insert("oscillator_with_divergence", EventId::OscillatorWithDivergence);
m.insert("oscillatorwithvolumeweight", EventId::OscillatorWithVolumeWeight);
m.insert("oscillator_with_volume_weight", EventId::OscillatorWithVolumeWeight);
m.insert("pairscointegrationproxy", EventId::PairsCointegrationProxy);
m.insert("pairs_cointegration_proxy", EventId::PairsCointegrationProxy);
m.insert("pivot", EventId::Pivot);
m.insert("pricelinecross", EventId::PriceLineCross);
m.insert("price_line_cross", EventId::PriceLineCross);
m.insert("regimegate", EventId::RegimeGate);
m.insert("regime_gate", EventId::RegimeGate);
m.insert("relativeposition", EventId::RelativePosition);
m.insert("relative_position", EventId::RelativePosition);
m.insert("relativestrengthcross", EventId::RelativeStrengthCross);
m.insert("relative_strength_cross", EventId::RelativeStrengthCross);
m.insert("statisticalwickdetector", EventId::StatisticalWickDetector);
m.insert("statistical_wick_detector", EventId::StatisticalWickDetector);
m.insert("wick_spike", EventId::StatisticalWickDetector);
m.insert("swingdetection", EventId::SwingDetection);
m.insert("swing_detection", EventId::SwingDetection);
m.insert("swing", EventId::SwingDetection);
m.insert("threshold", EventId::Threshold);
m.insert("volatilityregimedetector", EventId::VolatilityRegimeDetector);
m.insert("volatility_regime_detector", EventId::VolatilityRegimeDetector);
m.insert("volatility_regime", EventId::VolatilityRegimeDetector);
m.insert("volumeeventdetector", EventId::VolumeEventDetector);
m.insert("volume_event_detector", EventId::VolumeEventDetector);
m.insert("volume_event", EventId::VolumeEventDetector);
m
});