mod modules;
use anyhow::Result;
use clap::Parser;
use modules::{
args::Cli, config::Config, display::product::Product, location::Address, params::Params, weather::Weather,
};
#[tokio::main]
async fn main() -> Result<()> {
let args = Cli::parse();
let config = Config::get();
let params = Params::merge(config.clone(), &args).await?;
let product = run(¶ms).await?;
product
.render(
¶ms.config.forecast,
¶ms.config.units,
¶ms.config.gui,
¶ms.config.language,
¶ms.texts.weather,
)
.await?;
params.handle_next(args, config).await?;
Ok(())
}
pub async fn run(params: &Params) -> Result<Product> {
let loc = Address::search(¶ms.config.address, ¶ms.config.language).await?;
let (lat, lon) = (loc.lat.parse::<f64>().unwrap(), loc.lon.parse::<f64>().unwrap());
let address = loc.name.to_string();
let weather = Weather::get(lat, lon, ¶ms.config.units).await?;
Ok(Product { address, weather })
}