use chrono::DateTime;
use chrono::Utc;
use serde::Deserialize;
use crate::api::v2::account;
use crate::api::v2::watchlist;
use crate::Str;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct WatchlistItem {
#[serde(rename = "id")]
pub id: watchlist::Id,
#[serde(rename = "name")]
pub name: String,
#[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>,
#[doc(hidden)]
#[serde(skip)]
pub _non_exhaustive: (),
}
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::CreateReqInit;
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 id = Uuid::new_v4().to_string();
let request = CreateReqInit {
symbols: vec!["AAPL".to_string()],
..Default::default()
}
.init(&id);
let created = client.issue::<watchlist::Create>(&request).await.unwrap();
let result = client.issue::<Get>(&()).await;
client
.issue::<watchlist::Delete>(&created.id)
.await
.unwrap();
let watchlists = result.unwrap();
assert!(
watchlists
.iter()
.any(|l| l.id == created.id && l.name == id),
"{watchlists:#?} : {id}"
)
}
}