marketstack/api/
common.rs

1//! API types common to many endpoints.
2//!
3//! Usually these are enumerations or other simple wrappers around structures
4//! present in Marketstack's REST API.
5
6use std::borrow::Cow;
7
8use crate::api::ParamValue;
9
10/// Orderings for sorted results.
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum SortOrder {
13    /// Value should be sorted ASC, usually by date.
14    Ascending,
15    /// Value should be sorted DESC, usually by date.
16    Descending,
17}
18
19#[allow(clippy::derivable_impls)]
20impl Default for SortOrder {
21    fn default() -> Self {
22        // XXX{rust-1.62): use `#[default]`}
23        SortOrder::Descending
24    }
25}
26
27impl SortOrder {
28    /// The string representation of the sort order.
29    pub fn as_str(self) -> &'static str {
30        match self {
31            SortOrder::Ascending => "ASC",
32            SortOrder::Descending => "DESC",
33        }
34    }
35}
36
37impl ParamValue<'static> for SortOrder {
38    fn as_value(&self) -> Cow<'static, str> {
39        self.as_str().into()
40    }
41}
42
43/// Data interval for `intraday` endpoint.
44#[derive(Debug, Clone)]
45pub enum Interval {
46    /// 1min interval.
47    OneMinute,
48    /// 5min interval.
49    FiveMinutes,
50    /// 10min interval.
51    TenMinutes,
52    /// 15min interval.
53    FifteenMinutes,
54    /// 30min interval.
55    ThirtyMinutes,
56    /// 1hour interval.
57    OneHour,
58    /// 3hour interval.
59    ThreeHour,
60    /// 6hour interval.
61    SixHour,
62    /// 12hour interval.
63    TwelveHour,
64    /// 24hour interval.
65    TwentyFourHour,
66}
67
68#[allow(clippy::derivable_impls)]
69impl Default for Interval {
70    fn default() -> Self {
71        // XXX{rust-1.62): use `#[default]`}
72        Interval::OneHour
73    }
74}
75
76impl Interval {
77    /// The string representation of the interval.
78    fn as_str(&self) -> &'static str {
79        match self {
80            Interval::OneMinute => "1min",
81            Interval::FiveMinutes => "5min",
82            Interval::TenMinutes => "10min",
83            Interval::FifteenMinutes => "15min",
84            Interval::ThirtyMinutes => "30min",
85            Interval::OneHour => "1hour",
86            Interval::ThreeHour => "3hour",
87            Interval::SixHour => "6hour",
88            Interval::TwelveHour => "12hour",
89            Interval::TwentyFourHour => "24hour",
90        }
91    }
92}
93
94impl ParamValue<'static> for Interval {
95    fn as_value(&self) -> Cow<'static, str> {
96        self.as_str().into()
97    }
98}