Parse json data
- Process json response - Extract required json fields - Use the extracted fields
This commit is contained in:
parent
bebfc6887f
commit
bb410d002f
@ -7,6 +7,6 @@ edition = "2024"
|
||||
toml = "0.9.6"
|
||||
dirs = "6.0.0"
|
||||
serde = { version = "1.0.225", features = ["derive"] }
|
||||
reqwest = {version = "0.12.23", features = ["blocking"] }
|
||||
reqwest = {version = "0.12.23", features = ["blocking", "json"] }
|
||||
serde_json = "1.0.145"
|
||||
|
||||
|
34
src/main.rs
34
src/main.rs
@ -14,6 +14,30 @@ struct Config {
|
||||
general: General,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Weather {
|
||||
main: String,
|
||||
icon: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Main {
|
||||
temp: f32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Sys {
|
||||
country: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct WeatherResponse {
|
||||
name: String,
|
||||
sys: Sys,
|
||||
weather: Vec<Weather>,
|
||||
main: Main,
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut config_path = dirs::config_dir().ok_or("No config dir found")?;
|
||||
config_path.push("candywidgets/openweathermap.toml");
|
||||
@ -28,8 +52,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
config.general.units, config.general.city_id, config.general.api_key
|
||||
);
|
||||
|
||||
let resp = blocking::get(&url)?.text()?;
|
||||
println!("Weather report:\n{resp}");
|
||||
let resp = blocking::get(&url)?.json::<WeatherResponse>()?;
|
||||
|
||||
println!("City: {}, {}", resp.name, resp.sys.country);
|
||||
if let Some(w) = resp.weather.first() {
|
||||
println!("Weather: {}", w.main);
|
||||
println!("Icon: {}", w.icon);
|
||||
}
|
||||
println!("Temperature: {}°C", resp.main.temp);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user