use chrono::DateTime;
use chrono::Utc;
use serde::Deserialize;
use crate::api::v2::account;
use crate::api::v2::watchlist;
use crate::Str;
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub struct WatchlistItem {
#[serde(rename = "id")]
pub id: watchlist::Id,
#[serde(rename = "account_id")]
pub account_id: account::Id,
#[serde(rename = "created_at")]
pub created_at: DateTime<Utc>,
#[serde(rename = "updated_at")]
pub updated_at: DateTime<Utc>,
}
Endpoint! {
pub Get(()),
Ok => Vec<WatchlistItem>, [
OK,
],
Err => GetError, []
#[inline]
fn path(_input: &Self::Input) -> Str {
"/v2/watchlists".into()
}
}
#[cfg(test)]
mod tests {
use super::*;
use uuid::Uuid;
use crate::api::v2::watchlist;
use crate::api::v2::watchlist::CreateReq;
use crate::api_info::ApiInfo;
use crate::Client;
use test_log::test;
#[test(tokio::test)]
async fn list_watchlists() {
let api_info = ApiInfo::from_env().unwrap();
let client = Client::new(api_info);
let created = client
.issue::<watchlist::Post>(&CreateReq {
name: Uuid::new_v4().to_string(),
symbols: vec!["AAPL".to_string()],
})
.await
.unwrap();
let result = client.issue::<Get>(&()).await;
client
.issue::<watchlist::Delete>(&created.id)
.await
.unwrap();
let watchlists = result.unwrap();
let mut ids = watchlists.iter().map(|w| w.id);
assert!(ids.any(|x| x == created.id))
}
}