#weather #helper #content #tutorial #fastly #forecast #widgets

weather_demo_helpers

Fastly Compute@Edge 合成内容教程(天气应用)的辅助工具

1 个不稳定版本

0.1.1 2022年12月8日
0.1.0 2022年12月8日

#11 in #fastly

MIT 许可证

9KB
101

Fastly Compute@Edge 合成内容教程的辅助工具

此 crate 导出可序列化/反序列化的 struct ForecastAPIResponse 结构体,用于 WeatherAPIForecast 端点响应。

以下数据结构支持在 合成内容教程 中使用 Fastly 的 Compute@Edge 创建天气小部件。

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>()?;

结果结构

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,
                    },
                },
            },
        ],
    },
}

依赖

~1.6–2.6MB
~51K SLoC