avanza_rs/stock/
list.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{client::Client, error::Error};
4
5#[derive(Debug, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct StockListFilter {
8    pub country_codes: Vec<String>,
9}
10
11#[derive(Debug, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase")]
13pub struct StockListSortBy {
14    pub field: String,
15    pub order: String,
16}
17
18#[derive(Debug, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct StockListRequest {
21    pub filter: StockListFilter,
22    pub limit: u32,
23    pub offset: u32,
24    pub sort_by: StockListSortBy,
25}
26
27#[derive(Debug, Serialize, Deserialize)]
28#[serde(rename_all = "camelCase")]
29pub struct Instrument {
30    pub orderbook_id: String,
31    pub r#type: String,
32    pub name: String,
33    pub short_name: String,
34    pub currency: String,
35    pub country_code: String,
36    pub direct_yield: f64,
37    pub price_earnings_ratio: f64,
38    pub number_of_owners: u32,
39}
40
41#[derive(Debug, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct StockListResponsePagination {
44    pub offset: u32,
45    pub limit: u32
46}
47
48#[derive(Debug, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct StockListResponse {
51    pub stocks: Vec<Instrument>,
52    pub total_number_of_orderbooks: u32,
53    pub pagination: StockListResponsePagination,
54}
55
56impl Client {
57    pub async fn get_stock_list(
58        &self,
59        request: &StockListRequest,
60    ) -> Result<StockListResponse, Error> {
61        let res = self
62            .http_client
63            .post(&self.config.urls.stock_list)
64            .body_json(&request)?
65            .recv_json::<StockListResponse>()
66            .await?;
67        return Ok(res);
68    }
69}