finance-query 3.0.0

A Rust library for querying financial data
Documentation
//! Nasdaq provider (keyless) — earnings, IPO, dividend, split calendars.

use super::{CalendarProvider, ProviderAdapter, ProviderCore};
use crate::error::Result;

pub(crate) struct NasdaqProvider;

impl ProviderCore for NasdaqProvider {
    fn id(&self) -> super::Provider {
        super::Provider::Nasdaq
    }
}

#[async_trait::async_trait]
impl CalendarProvider for NasdaqProvider {
    async fn fetch_market_calendar(
        &self,
        kind: crate::models::calendar::market::CalendarKind,
        from: &str,
        to: &str,
    ) -> Result<Vec<crate::models::calendar::market::MarketCalendarEntry>> {
        use crate::models::calendar::market::CalendarKind;

        if !matches!(
            kind,
            CalendarKind::Earnings
                | CalendarKind::Ipo
                | CalendarKind::Dividend
                | CalendarKind::Split
        ) {
            return Err(self.not_supported(kind.operation()));
        }
        crate::adapters::nasdaq::fetch_market_calendar_response(kind, from, to).await
    }
}

#[async_trait::async_trait]
impl ProviderAdapter for NasdaqProvider {
    fn as_calendar(&self) -> Option<&dyn CalendarProvider> {
        Some(self)
    }
}