use crate::constants::{Interval, TimeRange};
use crate::models::chart::{Candle, Chart, ChartMeta};
use crate::providers::Provider;
pub(crate) struct CryptoExchange {
pub provider: Provider,
pub code: &'static str,
pub name: &'static str,
}
pub(crate) fn crypto_chart(
exchange: &CryptoExchange,
symbol: &str,
quote_currency: Option<String>,
candles: Vec<Candle>,
interval: Option<Interval>,
range: Option<TimeRange>,
) -> Chart {
Chart {
symbol: symbol.to_string(),
meta: ChartMeta {
symbol: symbol.to_string(),
currency: quote_currency,
exchange_name: Some(exchange.code.to_string()),
full_exchange_name: Some(exchange.name.to_string()),
instrument_type: Some("CRYPTOCURRENCY".to_string()),
first_trade_date: candles.first().map(|c| c.timestamp),
regular_market_time: candles.last().map(|c| c.timestamp),
regular_market_price: candles.last().map(|c| c.close),
data_granularity: interval.map(|i| i.as_str().to_string()),
range: range.map(|r| r.as_str().to_string()),
provider_id: Some(exchange.provider),
..Default::default()
},
candles,
interval,
range,
provider_id: Some(exchange.provider),
}
}