1 unstable release
0.1.1 | Dec 8, 2022 |
---|---|
0.1.0 |
|
#3 in #compute-edge
9KB
101 lines
Helpers for Fastly's Compute@Edge Synthetic Content Tutorial
This crate exports a (de)serializable struct ForecastAPIResponse
for WeatherAPI's Forecast endpoint response.
The ensuing data structure supports the creation of a Weather Widget during the Synthetic Content Tutorial using Fastly's Compute@Edge.
Use with Response.take_body_json<T: DeserializeOwned>
let url = format!(
"http://api.weatherapi.com/v1/forecast.json?q={},{}&key={}",
LATITUDE,
LONGITUDE,
MY_API_KEY
);
let mut resp = Request::new(Method::GET, url)
.with_pass(true)
.send(BACKEND_NAME)?;
// Parse the JSON response body into an ForecastAPIResponse
let api_response = resp.take_body_json::<ForecastAPIResponse>()?;
Resulting structure
ForecastAPIResponse {
on: LocationData {
date: DateElements {
weekday: "Wednesday",
weekday_short: "Wed",
pretty_date: " 7 December 2022",
},
},
current: CurrentWeatherData {
temp_c: 2.0,
temp_f: 35.6,
wind_mph: 6.9,
wind_kph: 11.2,
precip_mm: 0.0,
precip_in: 0.0,
humidity: 80.0,
condition: WeatherCondition {
description: "Clear",
icon: 1000,
},
},
forecast: ForecastData {
on: [
WeatherReport {
dt: DateElements {
weekday: "Wednesday",
weekday_short: "Wed",
pretty_date: " 7 December 2022",
},
day: DayWeatherData {
avgtemp_c: 3.5,
avgtemp_f: 38.3,
condition: WeatherCondition {
description: "Partly cloudy",
icon: 1003,
},
},
},
WeatherReport {
dt: DateElements {
weekday: "Thursday",
weekday_short: "Thu",
pretty_date: " 8 December 2022",
},
day: DayWeatherData {
avgtemp_c: 2.0,
avgtemp_f: 35.5,
condition: WeatherCondition {
description: "Sunny",
icon: 1000,
},
},
},
WeatherReport {
dt: DateElements {
weekday: "Friday",
weekday_short: "Fri",
pretty_date: " 9 December 2022",
},
day: DayWeatherData {
avgtemp_c: 1.3,
avgtemp_f: 34.4,
condition: WeatherCondition {
description: "Sunny",
icon: 1000,
},
},
},
],
},
}
Dependencies
~1.6–2.8MB
~52K SLoC