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
extern crate serde_json;
extern crate ureq;
use crate::{client::Client, helpers::*};
use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Split {
#[serde(rename(deserialize = "ticker"))]
pub symbol: String,
#[serde(
deserialize_with = "string_to_naive_date",
serialize_with = "naive_date_to_string"
)]
pub ex_date: NaiveDate,
#[serde(
deserialize_with = "string_to_naive_date",
serialize_with = "naive_date_to_string"
)]
pub payment_date: NaiveDate,
#[serde(
deserialize_with = "option_string_to_naive_date",
serialize_with = "option_naive_date_to_string",
default
)]
pub declared_date: Option<NaiveDate>,
pub ratio: f64,
#[serde(rename(deserialize = "forfactor"))]
pub for_factor: Option<i32>,
#[serde(rename(deserialize = "tofactor"))]
pub to_factor: Option<i32>
}
#[derive(Debug, Deserialize, Serialize)]
pub struct SplitsResponse {
pub count: usize,
pub results: Vec<Split>,
pub status: String
}
impl Client {
pub fn get_splits(&self, symbol: &str) -> std::io::Result<SplitsResponse> {
let uri = format!(
"{}/v2/reference/splits/{}?apikey={}",
self.api_uri, symbol, self.key
);
let resp = get_response(&uri)?;
let resp = resp.into_json_deserialize::<SplitsResponse>()?;
Ok(resp)
}
}
#[cfg(test)]
mod splits {
use crate::client::Client;
#[test]
fn works() {
let client = Client::new();
let splits = client.get_splits("AAPL").unwrap();
assert!(splits.results.len() > 3);
}
}