└── nrthr6 /nrthr6: -------------------------------------------------------------------------------- 1 | use reqwest; 2 | use serde::Deserialize; 3 | use std::env; 4 | use std::error::Error; 5 | 6 | #[derive(Deserialize)] 7 | struct WeatherData { 8 | main: Main, 9 | weather: Vec, 10 | } 11 | 12 | #[derive(Deserialize)] 13 | struct Main { 14 | temp: f64, 15 | humidity: u8, 16 | } 17 | 18 | #[derive(Deserialize)] 19 | struct Weather { 20 | description: String, 21 | } 22 | 23 | const API_KEY: &str = "your_api_key_here"; 24 | const BASE_URL: &str = "https://api.openweathermap.org/data/2.5/weather"; 25 | 26 | #[tokio::main] 27 | async fn main() -> Result<(), Box> { 28 | let args: Vec = env::args().collect(); 29 | if args.len() < 2 { 30 | println!("Usage: weather_cli "); 31 | return Ok(()); 32 | } 33 | 34 | let city = &args[1]; 35 | let url = format!("{}?q={}&appid={}&units=metric", BASE_URL, city, API_KEY); 36 | 37 | let response = reqwest::get(&url).await?; 38 | if response.status().is_success() { 39 | let weather: WeatherData = response.json().await?; 40 | println!("Weather in {}: {}", city, weather.weather[0].description); 41 | println!("Temperature: {}°C, Humidity: {}%", weather.main.temp, weather.main.humidity); 42 | } else { 43 | println!("Failed to fetch weather data."); 44 | } 45 | Ok(()) 46 | } 47 | --------------------------------------------------------------------------------