remove fahrenheit from data structs
This commit is contained in:
parent
2bc2b7dfc2
commit
025cc8ce86
7 changed files with 31 additions and 63 deletions
|
|
@ -37,8 +37,8 @@ pub fn render(allocator: std.mem.Allocator, data: types.WeatherData, options: Re
|
||||||
}
|
}
|
||||||
|
|
||||||
fn renderCurrent(w: *std.Io.Writer, current: types.CurrentCondition, options: RenderOptions) !void {
|
fn renderCurrent(w: *std.Io.Writer, current: types.CurrentCondition, options: RenderOptions) !void {
|
||||||
const temp = if (options.use_imperial) current.temp_f else current.temp_c;
|
const temp = if (options.use_imperial) current.tempFahrenheit() else current.temp_c;
|
||||||
const feels_like = if (options.use_imperial) current.feels_like_f else current.feels_like_c;
|
const feels_like = if (options.use_imperial) current.feelsLikeFahrenheit() else current.feels_like_c;
|
||||||
const temp_unit = if (options.use_imperial) "°F" else "°C";
|
const temp_unit = if (options.use_imperial) "°F" else "°C";
|
||||||
const wind_unit = if (options.use_imperial) "mph" else "km/h";
|
const wind_unit = if (options.use_imperial) "mph" else "km/h";
|
||||||
const wind_speed = if (options.use_imperial) current.wind_kph * 0.621371 else current.wind_kph;
|
const wind_speed = if (options.use_imperial) current.wind_kph * 0.621371 else current.wind_kph;
|
||||||
|
|
@ -323,8 +323,6 @@ test "render with imperial units" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 10.0,
|
.temp_c = 10.0,
|
||||||
.feels_like_c = 10.0,
|
.feels_like_c = 10.0,
|
||||||
.feels_like_f = 10.0 * 1.8 + 32,
|
|
||||||
.temp_f = 50.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 60,
|
.humidity = 60,
|
||||||
|
|
@ -352,8 +350,6 @@ test "clear weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 20.0,
|
.temp_c = 20.0,
|
||||||
.feels_like_c = 20.0,
|
.feels_like_c = 20.0,
|
||||||
.feels_like_f = 20.0 * 1.8 + 32,
|
|
||||||
.temp_f = 68.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 50,
|
.humidity = 50,
|
||||||
|
|
@ -379,8 +375,6 @@ test "partly cloudy weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 18.0,
|
.temp_c = 18.0,
|
||||||
.feels_like_c = 18.0,
|
.feels_like_c = 18.0,
|
||||||
.feels_like_f = 18.0 * 1.8 + 32,
|
|
||||||
.temp_f = 64.0,
|
|
||||||
.condition = "Partly cloudy",
|
.condition = "Partly cloudy",
|
||||||
.weather_code = .clouds_few,
|
.weather_code = .clouds_few,
|
||||||
.humidity = 55,
|
.humidity = 55,
|
||||||
|
|
@ -406,8 +400,6 @@ test "cloudy weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 15.0,
|
.temp_c = 15.0,
|
||||||
.feels_like_c = 15.0,
|
.feels_like_c = 15.0,
|
||||||
.feels_like_f = 15.0 * 1.8 + 32,
|
|
||||||
.temp_f = 59.0,
|
|
||||||
.condition = "Cloudy",
|
.condition = "Cloudy",
|
||||||
.weather_code = .clouds_overcast,
|
.weather_code = .clouds_overcast,
|
||||||
.humidity = 70,
|
.humidity = 70,
|
||||||
|
|
@ -433,8 +425,6 @@ test "rain weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 12.0,
|
.temp_c = 12.0,
|
||||||
.feels_like_c = 12.0,
|
.feels_like_c = 12.0,
|
||||||
.feels_like_f = 12.0 * 1.8 + 32,
|
|
||||||
.temp_f = 54.0,
|
|
||||||
.condition = "Rain",
|
.condition = "Rain",
|
||||||
.weather_code = .rain_moderate,
|
.weather_code = .rain_moderate,
|
||||||
.humidity = 85,
|
.humidity = 85,
|
||||||
|
|
@ -459,8 +449,6 @@ test "thunderstorm weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 14.0,
|
.temp_c = 14.0,
|
||||||
.feels_like_c = 14.0,
|
.feels_like_c = 14.0,
|
||||||
.feels_like_f = 14.0 * 1.8 + 32,
|
|
||||||
.temp_f = 57.0,
|
|
||||||
.condition = "Thunderstorm",
|
.condition = "Thunderstorm",
|
||||||
.weather_code = .thunderstorm,
|
.weather_code = .thunderstorm,
|
||||||
.humidity = 90,
|
.humidity = 90,
|
||||||
|
|
@ -485,8 +473,6 @@ test "snow weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = -2.0,
|
.temp_c = -2.0,
|
||||||
.feels_like_c = -2.0,
|
.feels_like_c = -2.0,
|
||||||
.feels_like_f = -2.0 * 1.8 + 32,
|
|
||||||
.temp_f = 28.0,
|
|
||||||
.condition = "Snow",
|
.condition = "Snow",
|
||||||
.weather_code = .snow,
|
.weather_code = .snow,
|
||||||
.humidity = 80,
|
.humidity = 80,
|
||||||
|
|
@ -511,8 +497,6 @@ test "sleet weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 0.0,
|
.temp_c = 0.0,
|
||||||
.feels_like_c = 0.0,
|
.feels_like_c = 0.0,
|
||||||
.feels_like_f = 0.0 * 1.8 + 32,
|
|
||||||
.temp_f = 32.0,
|
|
||||||
.condition = "Sleet",
|
.condition = "Sleet",
|
||||||
.weather_code = .sleet,
|
.weather_code = .sleet,
|
||||||
.humidity = 75,
|
.humidity = 75,
|
||||||
|
|
@ -537,8 +521,6 @@ test "fog weather art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 8.0,
|
.temp_c = 8.0,
|
||||||
.feels_like_c = 8.0,
|
.feels_like_c = 8.0,
|
||||||
.feels_like_f = 8.0 * 1.8 + 32,
|
|
||||||
.temp_f = 46.0,
|
|
||||||
.condition = "Fog",
|
.condition = "Fog",
|
||||||
.weather_code = .fog,
|
.weather_code = .fog,
|
||||||
.humidity = 95,
|
.humidity = 95,
|
||||||
|
|
@ -563,8 +545,6 @@ test "unknown weather code art" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 16.0,
|
.temp_c = 16.0,
|
||||||
.feels_like_c = 16.0,
|
.feels_like_c = 16.0,
|
||||||
.feels_like_f = 16.0 * 1.8 + 32,
|
|
||||||
.temp_f = 61.0,
|
|
||||||
.condition = "Unknown",
|
.condition = "Unknown",
|
||||||
.weather_code = .unknown,
|
.weather_code = .unknown,
|
||||||
.humidity = 60,
|
.humidity = 60,
|
||||||
|
|
@ -592,8 +572,6 @@ test "temperature matches between ansi and custom format" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 13.1,
|
.temp_c = 13.1,
|
||||||
.feels_like_c = 13.1,
|
.feels_like_c = 13.1,
|
||||||
.feels_like_f = 13.1 * 1.8 + 32,
|
|
||||||
.temp_f = 55.6,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 60,
|
.humidity = 60,
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ pub fn render(allocator: std.mem.Allocator, weather: types.WeatherData, format:
|
||||||
'C' => try writer.print("{s}", .{weather.current.condition}),
|
'C' => try writer.print("{s}", .{weather.current.condition}),
|
||||||
'h' => try writer.print("{d}%", .{weather.current.humidity}),
|
'h' => try writer.print("{d}%", .{weather.current.humidity}),
|
||||||
't' => {
|
't' => {
|
||||||
const temp = if (use_imperial) weather.current.temp_f else weather.current.temp_c;
|
const temp = if (use_imperial) weather.current.tempFahrenheit() else weather.current.temp_c;
|
||||||
const unit = if (use_imperial) "°F" else "°C";
|
const unit = if (use_imperial) "°F" else "°C";
|
||||||
const sign: u8 = if (temp >= 0) '+' else 0;
|
const sign: u8 = if (temp >= 0) '+' else 0;
|
||||||
if (sign != 0) {
|
if (sign != 0) {
|
||||||
|
|
@ -26,7 +26,7 @@ pub fn render(allocator: std.mem.Allocator, weather: types.WeatherData, format:
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'f' => {
|
'f' => {
|
||||||
const temp = if (use_imperial) weather.current.temp_f else weather.current.temp_c;
|
const temp = if (use_imperial) weather.current.tempFahrenheit() else weather.current.temp_c;
|
||||||
const unit = if (use_imperial) "°F" else "°C";
|
const unit = if (use_imperial) "°F" else "°C";
|
||||||
const sign: u8 = if (temp >= 0) '+' else 0;
|
const sign: u8 = if (temp >= 0) '+' else 0;
|
||||||
if (sign != 0) {
|
if (sign != 0) {
|
||||||
|
|
@ -83,8 +83,6 @@ test "render custom format with location and temp" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 7.0,
|
.temp_c = 7.0,
|
||||||
.feels_like_c = 7.0,
|
.feels_like_c = 7.0,
|
||||||
.feels_like_f = 7.0 * 1.8 + 32,
|
|
||||||
.temp_f = 44.6,
|
|
||||||
.condition = "Overcast",
|
.condition = "Overcast",
|
||||||
.weather_code = .clouds_overcast,
|
.weather_code = .clouds_overcast,
|
||||||
.humidity = 76,
|
.humidity = 76,
|
||||||
|
|
@ -112,8 +110,6 @@ test "render custom format with newline" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 10.0,
|
.temp_c = 10.0,
|
||||||
.feels_like_c = 10.0,
|
.feels_like_c = 10.0,
|
||||||
.feels_like_f = 10.0 * 1.8 + 32,
|
|
||||||
.temp_f = 50.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 65,
|
.humidity = 65,
|
||||||
|
|
@ -140,8 +136,6 @@ test "render custom format with humidity and pressure" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 5.0,
|
.temp_c = 5.0,
|
||||||
.feels_like_c = 5.0,
|
.feels_like_c = 5.0,
|
||||||
.feels_like_f = 5.0 * 1.8 + 32,
|
|
||||||
.temp_f = 41.0,
|
|
||||||
.condition = "Cloudy",
|
.condition = "Cloudy",
|
||||||
.weather_code = .clouds_overcast,
|
.weather_code = .clouds_overcast,
|
||||||
.humidity = 85,
|
.humidity = 85,
|
||||||
|
|
@ -169,8 +163,6 @@ test "render custom format with imperial units" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 10.0,
|
.temp_c = 10.0,
|
||||||
.feels_like_c = 10.0,
|
.feels_like_c = 10.0,
|
||||||
.feels_like_f = 10.0 * 1.8 + 32,
|
|
||||||
.temp_f = 50.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 60,
|
.humidity = 60,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ pub fn render(allocator: std.mem.Allocator, weather: types.WeatherData) ![]const
|
||||||
const data = .{
|
const data = .{
|
||||||
.current_condition = .{
|
.current_condition = .{
|
||||||
.temp_C = weather.current.temp_c,
|
.temp_C = weather.current.temp_c,
|
||||||
.temp_F = weather.current.temp_f,
|
|
||||||
.weatherCode = weather.current.weather_code,
|
.weatherCode = weather.current.weather_code,
|
||||||
.weatherDesc = .{.{ .value = weather.current.condition }},
|
.weatherDesc = .{.{ .value = weather.current.condition }},
|
||||||
.humidity = weather.current.humidity,
|
.humidity = weather.current.humidity,
|
||||||
|
|
@ -28,8 +27,6 @@ test "render json format" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 15.0,
|
.temp_c = 15.0,
|
||||||
.feels_like_c = 15.0,
|
.feels_like_c = 15.0,
|
||||||
.feels_like_f = 15.0 * 1.8 + 32,
|
|
||||||
.temp_f = 59.0,
|
|
||||||
.condition = "Partly cloudy",
|
.condition = "Partly cloudy",
|
||||||
.weather_code = .clouds_few,
|
.weather_code = .clouds_few,
|
||||||
.humidity = 72,
|
.humidity = 72,
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ const emoji = @import("emoji.zig");
|
||||||
|
|
||||||
pub fn render(allocator: std.mem.Allocator, data: types.WeatherData, format: []const u8, use_imperial: bool) ![]const u8 {
|
pub fn render(allocator: std.mem.Allocator, data: types.WeatherData, format: []const u8, use_imperial: bool) ![]const u8 {
|
||||||
if (std.mem.eql(u8, format, "1")) {
|
if (std.mem.eql(u8, format, "1")) {
|
||||||
const temp = if (use_imperial) data.current.temp_f else data.current.temp_c;
|
const temp = if (use_imperial) data.current.tempFahrenheit() else data.current.temp_c;
|
||||||
const unit = if (use_imperial) "°F" else "°C";
|
const unit = if (use_imperial) "°F" else "°C";
|
||||||
return std.fmt.allocPrint(allocator, "{s}: {s} {d:.0}{s}", .{
|
return std.fmt.allocPrint(allocator, "{s}: {s} {d:.0}{s}", .{
|
||||||
data.location,
|
data.location,
|
||||||
|
|
@ -13,7 +13,7 @@ pub fn render(allocator: std.mem.Allocator, data: types.WeatherData, format: []c
|
||||||
unit,
|
unit,
|
||||||
});
|
});
|
||||||
} else if (std.mem.eql(u8, format, "2")) {
|
} else if (std.mem.eql(u8, format, "2")) {
|
||||||
const temp = if (use_imperial) data.current.temp_f else data.current.temp_c;
|
const temp = if (use_imperial) data.current.tempFahrenheit() else data.current.temp_c;
|
||||||
const unit = if (use_imperial) "°F" else "°C";
|
const unit = if (use_imperial) "°F" else "°C";
|
||||||
const wind = if (use_imperial) data.current.wind_kph * 0.621371 else data.current.wind_kph;
|
const wind = if (use_imperial) data.current.wind_kph * 0.621371 else data.current.wind_kph;
|
||||||
const wind_unit = if (use_imperial) "mph" else "km/h";
|
const wind_unit = if (use_imperial) "mph" else "km/h";
|
||||||
|
|
@ -28,7 +28,7 @@ pub fn render(allocator: std.mem.Allocator, data: types.WeatherData, format: []c
|
||||||
wind_unit,
|
wind_unit,
|
||||||
});
|
});
|
||||||
} else if (std.mem.eql(u8, format, "3")) {
|
} else if (std.mem.eql(u8, format, "3")) {
|
||||||
const temp = if (use_imperial) data.current.temp_f else data.current.temp_c;
|
const temp = if (use_imperial) data.current.tempFahrenheit() else data.current.temp_c;
|
||||||
const unit = if (use_imperial) "°F" else "°C";
|
const unit = if (use_imperial) "°F" else "°C";
|
||||||
const wind = if (use_imperial) data.current.wind_kph * 0.621371 else data.current.wind_kph;
|
const wind = if (use_imperial) data.current.wind_kph * 0.621371 else data.current.wind_kph;
|
||||||
const wind_unit = if (use_imperial) "mph" else "km/h";
|
const wind_unit = if (use_imperial) "mph" else "km/h";
|
||||||
|
|
@ -45,7 +45,7 @@ pub fn render(allocator: std.mem.Allocator, data: types.WeatherData, format: []c
|
||||||
data.current.humidity,
|
data.current.humidity,
|
||||||
});
|
});
|
||||||
} else if (std.mem.eql(u8, format, "4")) {
|
} else if (std.mem.eql(u8, format, "4")) {
|
||||||
const temp = if (use_imperial) data.current.temp_f else data.current.temp_c;
|
const temp = if (use_imperial) data.current.tempFahrenheit() else data.current.temp_c;
|
||||||
const unit = if (use_imperial) "°F" else "°C";
|
const unit = if (use_imperial) "°F" else "°C";
|
||||||
const wind = if (use_imperial) data.current.wind_kph * 0.621371 else data.current.wind_kph;
|
const wind = if (use_imperial) data.current.wind_kph * 0.621371 else data.current.wind_kph;
|
||||||
const wind_unit = if (use_imperial) "mph" else "km/h";
|
const wind_unit = if (use_imperial) "mph" else "km/h";
|
||||||
|
|
@ -80,11 +80,11 @@ fn renderCustom(allocator: std.mem.Allocator, data: types.WeatherData, format: [
|
||||||
'C' => try output.appendSlice(allocator, data.current.condition),
|
'C' => try output.appendSlice(allocator, data.current.condition),
|
||||||
'h' => try output.writer(allocator).print("{d}", .{data.current.humidity}),
|
'h' => try output.writer(allocator).print("{d}", .{data.current.humidity}),
|
||||||
't' => {
|
't' => {
|
||||||
const temp = if (use_imperial) data.current.temp_f else data.current.temp_c;
|
const temp = if (use_imperial) data.current.tempFahrenheit() else data.current.temp_c;
|
||||||
try output.writer(allocator).print("{d:.0}", .{temp});
|
try output.writer(allocator).print("{d:.0}", .{temp});
|
||||||
},
|
},
|
||||||
'f' => {
|
'f' => {
|
||||||
const temp = if (use_imperial) data.current.temp_f else data.current.temp_c;
|
const temp = if (use_imperial) data.current.tempFahrenheit() else data.current.temp_c;
|
||||||
try output.writer(allocator).print("{d:.0}", .{temp});
|
try output.writer(allocator).print("{d:.0}", .{temp});
|
||||||
},
|
},
|
||||||
'w' => {
|
'w' => {
|
||||||
|
|
@ -123,8 +123,6 @@ test "format 1" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 15.0,
|
.temp_c = 15.0,
|
||||||
.feels_like_c = 15.0,
|
.feels_like_c = 15.0,
|
||||||
.feels_like_f = 15.0 * 1.8 + 32,
|
|
||||||
.temp_f = 59.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 65,
|
.humidity = 65,
|
||||||
|
|
@ -149,8 +147,6 @@ test "custom format" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 15.0,
|
.temp_c = 15.0,
|
||||||
.feels_like_c = 15.0,
|
.feels_like_c = 15.0,
|
||||||
.feels_like_f = 15.0 * 1.8 + 32,
|
|
||||||
.temp_f = 59.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 65,
|
.humidity = 65,
|
||||||
|
|
@ -175,8 +171,6 @@ test "format 2 with imperial units" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 10.0,
|
.temp_c = 10.0,
|
||||||
.feels_like_c = 10.0,
|
.feels_like_c = 10.0,
|
||||||
.feels_like_f = 10.0 * 1.8 + 32,
|
|
||||||
.temp_f = 50.0,
|
|
||||||
.condition = "Cloudy",
|
.condition = "Cloudy",
|
||||||
.weather_code = .clouds_overcast,
|
.weather_code = .clouds_overcast,
|
||||||
.humidity = 70,
|
.humidity = 70,
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ pub fn render(allocator: std.mem.Allocator, weather: types.WeatherData, use_impe
|
||||||
try writer.print(" {s}\n", .{weather.current.condition});
|
try writer.print(" {s}\n", .{weather.current.condition});
|
||||||
try writer.writeAll(" 🌡️ ");
|
try writer.writeAll(" 🌡️ ");
|
||||||
if (use_imperial) {
|
if (use_imperial) {
|
||||||
try writer.print("{d:.1}°F\n", .{weather.current.temp_f});
|
try writer.print("{d:.1}°F\n", .{weather.current.tempFahrenheit()});
|
||||||
} else {
|
} else {
|
||||||
try writer.print("{d:.1}°C ({d:.1}°F)\n", .{ weather.current.temp_c, weather.current.temp_f });
|
try writer.print("{d:.1}°C ({d:.1}°F)\n", .{ weather.current.temp_c, weather.current.tempFahrenheit() });
|
||||||
}
|
}
|
||||||
try writer.writeAll(" 💧 ");
|
try writer.writeAll(" 💧 ");
|
||||||
try writer.print("{d}%\n", .{weather.current.humidity});
|
try writer.print("{d}%\n", .{weather.current.humidity});
|
||||||
|
|
@ -49,15 +49,13 @@ pub fn render(allocator: std.mem.Allocator, weather: types.WeatherData, use_impe
|
||||||
try writer.print(" {s}: {s}\n", .{ day.date, day.condition });
|
try writer.print(" {s}: {s}\n", .{ day.date, day.condition });
|
||||||
try writer.writeAll(" ↑ ");
|
try writer.writeAll(" ↑ ");
|
||||||
if (use_imperial) {
|
if (use_imperial) {
|
||||||
const max_f = day.max_temp_c * 9.0 / 5.0 + 32.0;
|
try writer.print("{d:.1}°F ", .{day.maxTempFahrenheit()});
|
||||||
try writer.print("{d:.1}°F ", .{max_f});
|
|
||||||
} else {
|
} else {
|
||||||
try writer.print("{d:.1}°C ", .{day.max_temp_c});
|
try writer.print("{d:.1}°C ", .{day.max_temp_c});
|
||||||
}
|
}
|
||||||
try writer.writeAll("↓ ");
|
try writer.writeAll("↓ ");
|
||||||
if (use_imperial) {
|
if (use_imperial) {
|
||||||
const min_f = day.min_temp_c * 9.0 / 5.0 + 32.0;
|
try writer.print("{d:.1}°F\n", .{day.minTempFahrenheit()});
|
||||||
try writer.print("{d:.1}°F\n", .{min_f});
|
|
||||||
} else {
|
} else {
|
||||||
try writer.print("{d:.1}°C\n", .{day.min_temp_c});
|
try writer.print("{d:.1}°C\n", .{day.min_temp_c});
|
||||||
}
|
}
|
||||||
|
|
@ -75,8 +73,6 @@ test "render v2 format" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 12.0,
|
.temp_c = 12.0,
|
||||||
.feels_like_c = 12.0,
|
.feels_like_c = 12.0,
|
||||||
.feels_like_f = 12.0 * 1.8 + 32,
|
|
||||||
.temp_f = 53.6,
|
|
||||||
.condition = "Overcast",
|
.condition = "Overcast",
|
||||||
.weather_code = .clouds_overcast,
|
.weather_code = .clouds_overcast,
|
||||||
.humidity = 80,
|
.humidity = 80,
|
||||||
|
|
@ -106,8 +102,6 @@ test "render v2 format with imperial units" {
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = 10.0,
|
.temp_c = 10.0,
|
||||||
.feels_like_c = 10.0,
|
.feels_like_c = 10.0,
|
||||||
.feels_like_f = 10.0 * 1.8 + 32,
|
|
||||||
.temp_f = 50.0,
|
|
||||||
.condition = "Clear",
|
.condition = "Clear",
|
||||||
.weather_code = .clear,
|
.weather_code = .clear,
|
||||||
.humidity = 65,
|
.humidity = 65,
|
||||||
|
|
|
||||||
|
|
@ -187,9 +187,7 @@ fn parseMetNoResponse(allocator: std.mem.Allocator, coords: Coordinates, json: s
|
||||||
.location = try std.fmt.allocPrint(allocator, "{d:.4},{d:.4}", .{ coords.latitude, coords.longitude }),
|
.location = try std.fmt.allocPrint(allocator, "{d:.4},{d:.4}", .{ coords.latitude, coords.longitude }),
|
||||||
.current = .{
|
.current = .{
|
||||||
.temp_c = temp_c,
|
.temp_c = temp_c,
|
||||||
.temp_f = temp_c * 9.0 / 5.0 + 32.0,
|
|
||||||
.feels_like_c = feels_like_c,
|
.feels_like_c = feels_like_c,
|
||||||
.feels_like_f = feels_like_c * 9.0 / 5.0 + 32.0,
|
|
||||||
.condition = try allocator.dupe(u8, symbolCodeToCondition(symbol_code)),
|
.condition = try allocator.dupe(u8, symbolCodeToCondition(symbol_code)),
|
||||||
.weather_code = symbolCodeToWeatherCode(symbol_code),
|
.weather_code = symbolCodeToWeatherCode(symbol_code),
|
||||||
.humidity = humidity,
|
.humidity = humidity,
|
||||||
|
|
|
||||||
|
|
@ -104,11 +104,12 @@ pub const WeatherData = struct {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fn celsiusToFahrenheit(c: f32) f32 {
|
||||||
|
return c * 9.0 / 5.0 + 32.0;
|
||||||
|
}
|
||||||
pub const CurrentCondition = struct {
|
pub const CurrentCondition = struct {
|
||||||
temp_c: f32,
|
temp_c: f32,
|
||||||
temp_f: f32,
|
|
||||||
feels_like_c: f32,
|
feels_like_c: f32,
|
||||||
feels_like_f: f32,
|
|
||||||
condition: []const u8,
|
condition: []const u8,
|
||||||
weather_code: WeatherCode,
|
weather_code: WeatherCode,
|
||||||
humidity: u8,
|
humidity: u8,
|
||||||
|
|
@ -116,6 +117,13 @@ pub const CurrentCondition = struct {
|
||||||
wind_dir: []const u8,
|
wind_dir: []const u8,
|
||||||
pressure_mb: f32,
|
pressure_mb: f32,
|
||||||
precip_mm: f32,
|
precip_mm: f32,
|
||||||
|
|
||||||
|
pub fn tempFahrenheit(self: CurrentCondition) f32 {
|
||||||
|
return celsiusToFahrenheit(self.temp_c);
|
||||||
|
}
|
||||||
|
pub fn feelsLikeFahrenheit(self: CurrentCondition) f32 {
|
||||||
|
return celsiusToFahrenheit(self.feels_like_c);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const ForecastDay = struct {
|
pub const ForecastDay = struct {
|
||||||
|
|
@ -125,6 +133,13 @@ pub const ForecastDay = struct {
|
||||||
condition: []const u8,
|
condition: []const u8,
|
||||||
weather_code: WeatherCode,
|
weather_code: WeatherCode,
|
||||||
hourly: []HourlyForecast,
|
hourly: []HourlyForecast,
|
||||||
|
|
||||||
|
pub fn maxTempFahrenheit(self: ForecastDay) f32 {
|
||||||
|
return celsiusToFahrenheit(self.max_temp_c);
|
||||||
|
}
|
||||||
|
pub fn minTempFahrenheit(self: ForecastDay) f32 {
|
||||||
|
return celsiusToFahrenheit(self.min_temp_c);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const HourlyForecast = struct {
|
pub const HourlyForecast = struct {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue