use clap::Subcommand;
use crate::cli::args::{DateRangeArgs, NameDateRangeArgs};
use crate::cli::dispatch::{run_by_date_range, run_by_name_date_range, run_endpoint};
use crate::cli::help;
use crate::cli::output::CommandPayload;
use crate::client::FmpClient;
use crate::endpoint;
use crate::error::Result;
#[derive(Debug, Subcommand)]
pub(crate) enum Cmd {
#[command(about = help::TREASURY_RATES_ABOUT, long_about = help::TREASURY_RATES_LONG)]
TreasuryRates(DateRangeArgs),
#[command(
about = help::ECONOMIC_INDICATORS_ABOUT,
long_about = help::ECONOMIC_INDICATORS_LONG
)]
EconomicIndicators(NameDateRangeArgs),
#[command(
about = help::MACRO_RISK_PREMIUM_ABOUT,
long_about = help::MACRO_RISK_PREMIUM_LONG
)]
RiskPremium,
}
pub(crate) async fn dispatch(client: &FmpClient, cmd: &Cmd) -> Result<CommandPayload> {
match cmd {
Cmd::TreasuryRates(args) => {
run_by_date_range(client, endpoint::TREASURY_RATES, &args.from, &args.to).await
}
Cmd::EconomicIndicators(args) => {
run_by_name_date_range(
client,
endpoint::ECONOMIC_INDICATORS,
&args.name,
&args.from,
&args.to,
)
.await
}
Cmd::RiskPremium => run_endpoint(client, endpoint::MARKET_RISK_PREMIUM).await,
}
}