Skip to main content

alpaca_api_client/
timeframe.rs

1use std::{io::Error, str::FromStr};
2
3/// Timeframe options utility for time frames accepted by alpaca api
4#[derive(Debug, PartialEq, Clone, Copy)]
5pub enum TimeFrame {
6    OneMinute,
7    FiveMinutes,
8    FifteenMinutes,
9    ThirtyMinutes,
10    OneHour,
11    FourHours,
12    OneDay,
13    OneWeek,
14    OneMonth,
15}
16
17impl ToString for TimeFrame {
18    fn to_string(&self) -> String {
19        match self {
20            TimeFrame::OneMinute => "1Min".to_string(),
21            TimeFrame::FiveMinutes => "5Min".to_string(),
22            TimeFrame::FifteenMinutes => "15Min".to_string(),
23            TimeFrame::ThirtyMinutes => "30Min".to_string(),
24            TimeFrame::OneHour => "1H".to_string(),
25            TimeFrame::FourHours => "4H".to_string(),
26            TimeFrame::OneDay => "1D".to_string(),
27            TimeFrame::OneWeek => "1W".to_string(),
28            TimeFrame::OneMonth => "1M".to_string(),
29        }
30    }
31}
32
33impl FromStr for TimeFrame {
34    type Err = Error;
35
36    fn from_str(s: &str) -> Result<Self, Self::Err> {
37        match s {
38            "1Min" => Ok(TimeFrame::OneMinute),
39            "5Min" => Ok(TimeFrame::FiveMinutes),
40            "15Min" => Ok(TimeFrame::FifteenMinutes),
41            "30Min" => Ok(TimeFrame::ThirtyMinutes),
42            "1Hour" => Ok(TimeFrame::OneHour),
43            "4Hour" => Ok(TimeFrame::FourHours),
44            "1Day" => Ok(TimeFrame::OneDay),
45            "1Week" => Ok(TimeFrame::OneWeek),
46            "1Month" => Ok(TimeFrame::OneMonth),
47            "1T" => Ok(TimeFrame::OneMinute),
48            "5T" => Ok(TimeFrame::FiveMinutes),
49            "15T" => Ok(TimeFrame::FifteenMinutes),
50            "30T" => Ok(TimeFrame::ThirtyMinutes),
51            "1H" => Ok(TimeFrame::OneHour),
52            "4H" => Ok(TimeFrame::FourHours),
53            "1D" => Ok(TimeFrame::OneDay),
54            "1W" => Ok(TimeFrame::OneWeek),
55            "1M" => Ok(TimeFrame::OneMonth),
56            _ => Err(Error::other("Timeframes Do Not Match")),
57        }
58    }
59}