use clap::Subcommand;
use crate::cli::args::SymbolDateRangeArgs;
use crate::cli::dispatch::run_by_symbol_date_range;
use crate::cli::help;
use crate::cli::output::CommandPayload;
use crate::client::FmpClient;
use crate::endpoint;
use crate::error::Result;
const SEC_FILINGS_LOOKBACK_DAYS: i64 = 90;
#[derive(Debug, Subcommand)]
pub(crate) enum Cmd {
#[command(
about = help::SEC_FILINGS_ABOUT,
long_about = help::SEC_FILINGS_LONG
)]
Filings(SymbolDateRangeArgs),
}
pub(crate) async fn dispatch(client: &FmpClient, cmd: &Cmd) -> Result<CommandPayload> {
match cmd {
Cmd::Filings(args) => {
let from = args.from.clone().or_else(|| {
let ago = jiff::Zoned::now()
.checked_sub(jiff::Span::new().days(SEC_FILINGS_LOOKBACK_DAYS))
.expect("90-day subtraction from current date cannot fail");
Some(ago.date().to_string())
});
run_by_symbol_date_range(
client,
endpoint::SEC_FILINGS_SEARCH_SYMBOL,
&args.symbol,
&from,
&args.to,
)
.await
}
}
}