finance_query/constants/
screeners.rs1#[non_exhaustive]
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
10#[serde(rename_all = "kebab-case")]
11pub enum Screener {
12 AggressiveSmallCaps,
15 #[serde(alias = "gainers")]
17 DayGainers,
18 #[serde(alias = "losers")]
20 DayLosers,
21 #[serde(alias = "growth-tech")]
23 GrowthTechnologyStocks,
24 #[serde(alias = "actives")]
26 MostActives,
27 #[serde(alias = "most-shorted")]
29 MostShortedStocks,
30 SmallCapGainers,
32 #[serde(alias = "undervalued-growth")]
34 UndervaluedGrowthStocks,
35 #[serde(alias = "undervalued-large")]
37 UndervaluedLargeCaps,
38 ConservativeForeignFunds,
41 HighYieldBond,
43 PortfolioAnchors,
45 SolidLargeGrowthFunds,
47 SolidMidcapGrowthFunds,
49 TopMutualFunds,
51}
52
53impl Screener {
54 pub fn as_scr_id(&self) -> &'static str {
56 match self {
57 Screener::AggressiveSmallCaps => "aggressive_small_caps",
58 Screener::DayGainers => "day_gainers",
59 Screener::DayLosers => "day_losers",
60 Screener::GrowthTechnologyStocks => "growth_technology_stocks",
61 Screener::MostActives => "most_actives",
62 Screener::MostShortedStocks => "most_shorted_stocks",
63 Screener::SmallCapGainers => "small_cap_gainers",
64 Screener::UndervaluedGrowthStocks => "undervalued_growth_stocks",
65 Screener::UndervaluedLargeCaps => "undervalued_large_caps",
66 Screener::ConservativeForeignFunds => "conservative_foreign_funds",
67 Screener::HighYieldBond => "high_yield_bond",
68 Screener::PortfolioAnchors => "portfolio_anchors",
69 Screener::SolidLargeGrowthFunds => "solid_large_growth_funds",
70 Screener::SolidMidcapGrowthFunds => "solid_midcap_growth_funds",
71 Screener::TopMutualFunds => "top_mutual_funds",
72 }
73 }
74
75 pub fn parse(s: &str) -> Option<Self> {
85 s.parse().ok()
86 }
87
88 pub fn valid_types() -> &'static str {
90 "aggressive-small-caps, day-gainers, day-losers, growth-technology-stocks, \
91 most-actives, most-shorted-stocks, small-cap-gainers, undervalued-growth-stocks, \
92 undervalued-large-caps, conservative-foreign-funds, high-yield-bond, \
93 portfolio-anchors, solid-large-growth-funds, solid-midcap-growth-funds, \
94 top-mutual-funds"
95 }
96
97 pub fn all() -> &'static [Screener] {
99 &[
100 Screener::AggressiveSmallCaps,
101 Screener::DayGainers,
102 Screener::DayLosers,
103 Screener::GrowthTechnologyStocks,
104 Screener::MostActives,
105 Screener::MostShortedStocks,
106 Screener::SmallCapGainers,
107 Screener::UndervaluedGrowthStocks,
108 Screener::UndervaluedLargeCaps,
109 Screener::ConservativeForeignFunds,
110 Screener::HighYieldBond,
111 Screener::PortfolioAnchors,
112 Screener::SolidLargeGrowthFunds,
113 Screener::SolidMidcapGrowthFunds,
114 Screener::TopMutualFunds,
115 ]
116 }
117}
118
119impl std::str::FromStr for Screener {
120 type Err = ();
121
122 fn from_str(s: &str) -> Result<Self, Self::Err> {
123 match s.to_lowercase().replace('_', "-").as_str() {
124 "aggressive-small-caps" => Ok(Screener::AggressiveSmallCaps),
125 "day-gainers" | "gainers" => Ok(Screener::DayGainers),
126 "day-losers" | "losers" => Ok(Screener::DayLosers),
127 "growth-technology-stocks" | "growth-tech" => Ok(Screener::GrowthTechnologyStocks),
128 "most-actives" | "actives" => Ok(Screener::MostActives),
129 "most-shorted-stocks" | "most-shorted" => Ok(Screener::MostShortedStocks),
130 "small-cap-gainers" => Ok(Screener::SmallCapGainers),
131 "undervalued-growth-stocks" | "undervalued-growth" => {
132 Ok(Screener::UndervaluedGrowthStocks)
133 }
134 "undervalued-large-caps" | "undervalued-large" => Ok(Screener::UndervaluedLargeCaps),
135 "conservative-foreign-funds" => Ok(Screener::ConservativeForeignFunds),
136 "high-yield-bond" => Ok(Screener::HighYieldBond),
137 "portfolio-anchors" => Ok(Screener::PortfolioAnchors),
138 "solid-large-growth-funds" => Ok(Screener::SolidLargeGrowthFunds),
139 "solid-midcap-growth-funds" => Ok(Screener::SolidMidcapGrowthFunds),
140 "top-mutual-funds" => Ok(Screener::TopMutualFunds),
141 _ => Err(()),
142 }
143 }
144}