Skip to main content

longport/screener/
types.rs

1#![allow(missing_docs)]
2
3use serde::{Deserialize, Serialize};
4
5// ── screener_recommend_strategies ─────────────────────────────────
6
7/// Response for [`crate::ScreenerContext::screener_recommend_strategies`]
8///
9/// The raw data contains a list of recommended built-in screener
10/// strategies.  The exact structure varies so the payload is
11/// preserved as raw JSON.
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct ScreenerRecommendStrategiesResponse {
14    /// Raw recommended strategies data
15    pub data: serde_json::Value,
16}
17
18// ── screener_user_strategies ──────────────────────────────────────
19
20/// Response for [`crate::ScreenerContext::screener_user_strategies`]
21///
22/// The raw data contains the current user's saved screener strategies.
23/// The exact structure varies so the payload is preserved as raw JSON.
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct ScreenerUserStrategiesResponse {
26    /// Raw user strategies data
27    pub data: serde_json::Value,
28}
29
30// ── screener_strategy ─────────────────────────────────────────────
31
32/// Response for [`crate::ScreenerContext::screener_strategy`]
33///
34/// The raw data contains detail for one screener strategy.
35/// The exact structure varies so the payload is preserved as raw JSON.
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct ScreenerStrategyResponse {
38    /// Raw strategy detail data
39    pub data: serde_json::Value,
40}
41
42// ── screener_condition ───────────────────────────────────────────
43
44/// A filter condition for [`crate::ScreenerContext::screener_search`] Mode B.
45///
46/// `key` is the indicator key (without the `filter_` prefix, e.g. `"pettm"`).
47/// `min` / `max` bound the range; leave empty for an open bound.
48/// `tech_values` is used for technical indicators (e.g. MACD/RSI); pass an
49/// empty map `{}` for fundamental indicators.
50#[derive(Debug, Clone, Serialize, Deserialize, Default)]
51pub struct ScreenerCondition {
52    /// Indicator key without `filter_` prefix, e.g. `"pettm"`, `"roe"`,
53    /// `"macd_day"`
54    pub key: String,
55    /// Lower bound (empty string = no lower bound)
56    #[serde(default)]
57    pub min: String,
58    /// Upper bound (empty string = no upper bound)
59    #[serde(default)]
60    pub max: String,
61    /// Technical indicator parameters (empty map for fundamental indicators).
62    /// Example: `{"category": "goldenfork", "period": "day"}`
63    #[serde(default)]
64    pub tech_values: serde_json::Value,
65}
66
67// ── screener_search ───────────────────────────────────────────────
68
69/// Response for [`crate::ScreenerContext::screener_search`]
70///
71/// The raw data contains a page of screened security results.
72/// The exact structure varies so the payload is preserved as raw JSON.
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct ScreenerSearchResponse {
75    /// Raw screener search results
76    pub data: serde_json::Value,
77}
78
79// ── screener_indicators ───────────────────────────────────────────
80
81/// Response for [`crate::ScreenerContext::screener_indicators`]
82///
83/// The raw data contains all available screener indicator definitions.
84/// The exact structure varies so the payload is preserved as raw JSON.
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct ScreenerIndicatorsResponse {
87    /// Raw indicator definitions
88    pub data: serde_json::Value,
89}