finql_data/
quote_handler.rs

1///! Data handler trait for market quotes
2
3use chrono::{DateTime, Utc};
4use async_trait::async_trait;
5
6use super::AssetHandler;
7use super::DataError;
8use crate::currency::Currency;
9use crate::quote::{Quote, Ticker};
10
11/// Handler for globally available market quotes data
12#[async_trait]
13pub trait QuoteHandler: AssetHandler {
14    // insert, get, update and delete for market data sources
15    async fn insert_ticker(&self, ticker: &Ticker) -> Result<usize, DataError>;
16    async fn get_ticker_id(&self, ticker: &str) -> Option<usize>;
17    async fn insert_if_new_ticker(&self, ticker: &Ticker) -> Result<usize, DataError>;
18    async fn get_ticker_by_id(&self, id: usize) -> Result<Ticker, DataError>;
19    async fn get_all_ticker(&self) -> Result<Vec<Ticker>, DataError>;
20    async fn get_all_ticker_for_source(
21        &self,
22        source: &str,
23    ) -> Result<Vec<Ticker>, DataError>;
24
25    /// Get all ticker that belong to a given asset specified by its asset ID
26    async fn get_all_ticker_for_asset(
27        &self,
28        asset_id: usize,
29    ) -> Result<Vec<Ticker>, DataError>;
30
31    async fn update_ticker(&self, ticker: &Ticker) -> Result<(), DataError>;
32    async fn delete_ticker(&self, id: usize) -> Result<(), DataError>;
33
34    /// Insert, get, update and delete for market data sources
35    async fn insert_quote(&self, quote: &Quote) -> Result<usize, DataError>;
36
37    /// Get the last quote in database for a specific asset name on or before the given time
38    async fn get_last_quote_before(
39        &self,
40        asset_name: &str,
41        time: DateTime<Utc>,
42    ) -> Result<(Quote, Currency), DataError>;
43
44    /// Get the last quote in database for a specific asset id on or before the given time
45    async fn get_last_quote_before_by_id(
46        &self,
47        asset_id: usize,
48        time: DateTime<Utc>,
49    ) -> Result<(Quote, Currency), DataError>;
50
51    async fn get_all_quotes_for_ticker(&self, ticker_id: usize) -> Result<Vec<Quote>, DataError>;
52    async fn update_quote(&self, quote: &Quote) -> Result<(), DataError>;
53    async fn delete_quote(&self, id: usize) -> Result<(), DataError>;
54
55    // Get and set cash rounding conventions by currency
56    // This method never throws, if currency could not be found in table, return 2 by default instead
57    async fn get_rounding_digits(&self, currency: Currency) -> i32;
58    async fn set_rounding_digits(&self, currency: Currency, digits: i32) -> Result<(), DataError>;
59}