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