authorgravatar for kernelnomad@proton.mekernelnomad <kernelnomad@proton.me> 2026-08-11 20:54:54+03:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-14 21:07:43+02:00
loga6dddfa8a07c3fffd89a76691d1a2c00319fd20f
tree21d5feb6ad889b5a5d17b4d7f592bd814a7bbf78
parent15c1d3132b1edc61e33310e195b16e9a02bcacdd
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Io.net.Ip4Address: fix `fromAny` return type


2 files changed, 17 insertions(+), 1 deletions(-)

lib/std/Io/net.zig+1-1
......@@ -376,7 +376,7 @@ pub const Ip4Address = struct {
376376
377377 /// Given an `IpAddress`, converts it to an `Ip4Address` directly, or from
378378 /// an IPv4-mapped IPv6 address, or returns `null`.
379 pub fn fromAny(addr: IpAddress) ?Ip6Address {
379 pub fn fromAny(addr: IpAddress) ?Ip4Address {
380380 return switch (addr) {
381381 .ip4 => |ip4| ip4,
382382 .ip6 => |ip6| fromIp6(ip6),
lib/std/Io/net/test.zig+16
......@@ -123,6 +123,22 @@ fn testIp4ParseAndRender(text: []const u8) !void {
123123 try testing.expectEqualStrings(text, without_port);
124124}
125125
126test "parse Ip4Address from IpAddress" {
127 try testIp4FromIpAddress("0.0.0.0:80", "0.0.0.0:80");
128 try testIp4FromIpAddress("255.255.255.255:0", "255.255.255.255:0");
129 try testIp4FromIpAddress("[::ffff:127.0.0.1]:80", "127.0.0.1:80");
130 try testIp4FromIpAddress("[::ffff:192.168.1.1]:443", "192.168.1.1:443");
131
132 try testing.expectEqual(null, net.Ip4Address.fromAny(try net.IpAddress.parseIp6("2001:db8::1", 443)));
133 try testing.expectEqual(null, net.Ip4Address.fromAny(try net.IpAddress.parseIp6("::c000:201", 80)));
134}
135
136fn testIp4FromIpAddress(any_address: []const u8, ip4_address: []const u8) !void {
137 const expected = try net.IpAddress.parseLiteral(ip4_address);
138 const actual = net.Ip4Address.fromAny(try net.IpAddress.parseLiteral(any_address)).?;
139 try testing.expectEqual(expected.ip4, actual);
140}
141
126142test "resolve DNS" {
127143 const io = testing.io;
128144