shindo_coding_utils 0.4.10

A utils crates which will be used in various micro-services
Documentation
use std::fmt;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NatsStreams {
    DataCrawling,
    StockScheduler,
    Notification,
}

impl NatsStreams {
    pub fn _as_str(&self) -> &'static str {
        match self {
            NatsStreams::DataCrawling => "data-crawling",
            NatsStreams::StockScheduler => "stock-scheduler",
            NatsStreams::Notification => "notification",
        }
    }

    pub fn to_string(&self) -> String {
        match self {
            NatsStreams::DataCrawling => "data-crawling".to_string(),
            NatsStreams::StockScheduler => "stock-scheduler".to_string(),
            NatsStreams::Notification => "notification".to_string(),
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataCrawlStreamSubjects {
    Historical,
    IntradayTrading,
    FollowingInvestorFindUserPostFromHomepage,
    FollowingInvestorFindUserCommentFromPost,
    Unknown,
}
impl DataCrawlStreamSubjects {
    pub fn as_str(&self) -> &'static str {
        match self {
            DataCrawlStreamSubjects::Historical => "historical",
            DataCrawlStreamSubjects::IntradayTrading => "intraday-trading",
            DataCrawlStreamSubjects::FollowingInvestorFindUserPostFromHomepage => {
                "following-investor.find-user-comment-from-homepage"
            }
            DataCrawlStreamSubjects::FollowingInvestorFindUserCommentFromPost => {
                "following-investor.find-user-comment-from-post"
            }
            DataCrawlStreamSubjects::Unknown => "unknown",
        }
    }

    pub fn from(s: &str) -> Self {
        match s {
            "historical" => DataCrawlStreamSubjects::Historical,
            "intraday-trading" => DataCrawlStreamSubjects::IntradayTrading,
            "following-investor.find-user-comment-from-homepage" => DataCrawlStreamSubjects::FollowingInvestorFindUserPostFromHomepage,
            "following-investor.find-user-comment-from-post" => DataCrawlStreamSubjects::FollowingInvestorFindUserCommentFromPost,
            _ => DataCrawlStreamSubjects::Unknown,
        }
    }

    pub fn to_vec() -> Vec<&'static str> {
        [
            DataCrawlStreamSubjects::Historical,
            DataCrawlStreamSubjects::IntradayTrading,
            DataCrawlStreamSubjects::FollowingInvestorFindUserPostFromHomepage,
            DataCrawlStreamSubjects::FollowingInvestorFindUserCommentFromPost,
        ]
        .iter()
        .map(|k| k.as_str())
        .collect()
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StockSchedulerStreamSubjects {
    OrderAnalysisRealtime,
    VolumeAnalysisRealtime,
    VolumeAnalysisForeignAnalyze,
    PriceAnalysisRealtime,
    // Heavy jobs goes here
    TradingPatternAnalysis,
    Unknown,
}
impl StockSchedulerStreamSubjects {
    pub fn as_str(&self) -> &'static str {
        match self {
            StockSchedulerStreamSubjects::OrderAnalysisRealtime => "order-analysis.realtime",
            StockSchedulerStreamSubjects::TradingPatternAnalysis => "trading-pattern.analysis",
            StockSchedulerStreamSubjects::VolumeAnalysisRealtime => "volume-analysis.realtime",
            StockSchedulerStreamSubjects::VolumeAnalysisForeignAnalyze => {
                "volume-analysis.foreign.analyze"
            }
            StockSchedulerStreamSubjects::PriceAnalysisRealtime => "price-analysis.realtime",
            StockSchedulerStreamSubjects::Unknown => "unknown",
        }
    }

    pub fn to_vec() -> Vec<&'static str> {
        [
            StockSchedulerStreamSubjects::OrderAnalysisRealtime,
            StockSchedulerStreamSubjects::VolumeAnalysisRealtime,
            StockSchedulerStreamSubjects::VolumeAnalysisForeignAnalyze,
            StockSchedulerStreamSubjects::PriceAnalysisRealtime,
            StockSchedulerStreamSubjects::TradingPatternAnalysis,
        ]
        .iter()
        .map(|k| k.as_str())
        .collect()
    }

    pub fn from(s: &str) -> Self {
        match s {
            "order-analysis.realtime" => StockSchedulerStreamSubjects::OrderAnalysisRealtime,
            "trading-pattern.analysis" => StockSchedulerStreamSubjects::TradingPatternAnalysis,
            "volume-analysis.realtime" => StockSchedulerStreamSubjects::VolumeAnalysisRealtime,
            "volume-analysis.foreign.analyze" => StockSchedulerStreamSubjects::VolumeAnalysisForeignAnalyze,
            "price-analysis.realtime" => StockSchedulerStreamSubjects::PriceAnalysisRealtime,
            _ => StockSchedulerStreamSubjects::Unknown,
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NotificationStreamSubjects {
    NotifyAbnormalTrade,
    Unknown,
}

impl NotificationStreamSubjects {
    pub fn as_str(&self) -> &'static str {
        match self {
            NotificationStreamSubjects::NotifyAbnormalTrade => "notify.abnormal-trade",
            NotificationStreamSubjects::Unknown => "unknown",
        }
    }

    pub fn to_vec() -> Vec<&'static str> {
        [NotificationStreamSubjects::NotifyAbnormalTrade]
            .iter()
            .map(|k| k.as_str())
            .collect()
    }

    pub fn from(s: &str) -> Self {
        match s {
            "notify.abnormal-trade" => NotificationStreamSubjects::NotifyAbnormalTrade,
            _ => NotificationStreamSubjects::Unknown,
        }
    }
}

impl fmt::Display for StockSchedulerStreamSubjects {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(self.as_str())
    }
}
impl fmt::Display for DataCrawlStreamSubjects {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(self.as_str())
    }
}
impl fmt::Display for NotificationStreamSubjects {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(self.as_str())
    }
}