use crate::constants::{Interval, TimeRange};
use crate::error::Result;
use crate::models::chart::Chart;
domain_handle! {
pub struct Commodity { symbol, symbol }
cache: crate::models::commodities::CommodityQuote, chart
}
impl Commodity {
pub async fn quote(&self) -> Result<crate::models::commodities::CommodityQuote> {
fetch_via!(
self,
symbol,
COMMODITIES,
fetch_commodities_quote,
crate::models::commodities::CommodityQuote
)
}
pub async fn chart(&self, interval: Interval, range: TimeRange) -> Result<Chart> {
fetch_chart_via!(self, self.symbol.to_string(), interval, range)
}
pub async fn history(&self, range: TimeRange) -> Result<Chart> {
self.chart(range.default_interval(), range).await
}
}
impl_chartable_analytics!(Commodity, crate::risk::TradingCalendar::Exchange);