authorgravatar for kernelnomad@proton.mekernelnomad <kernelnomad@proton.me> 2026-08-11 20:54:54+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-10-12 20:13:05+02:00
log85e2896e171664a9a29bfe5f54e11f45ade7792a
tree8ac634007710b8e092205aa27279f43bcac2b842
parent310a579efcaa4d7826276f07ca6cae501d841444

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 {...@@ -376,7 +376,7 @@ pub const Ip4Address = struct {
376376
377 /// Given an `IpAddress`, converts it to an `Ip4Address` directly, or from377 /// Given an `IpAddress`, converts it to an `Ip4Address` directly, or from
378 /// an IPv4-mapped IPv6 address, or returns `null`.378 /// an IPv4-mapped IPv6 address, or returns `null`.
379 pub fn fromAny(addr: IpAddress) ?Ip6Address {379 pub fn fromAny(addr: IpAddress) ?Ip4Address {
380 return switch (addr) {380 return switch (addr) {
381 .ip4 => |ip4| ip4,381 .ip4 => |ip4| ip4,
382 .ip6 => |ip6| fromIp6(ip6),382 .ip6 => |ip6| fromIp6(ip6),
lib/std/Io/net/test.zig+16
...@@ -123,6 +123,22 @@ fn testIp4ParseAndRender(text: []const u8) !void {...@@ -123,6 +123,22 @@ fn testIp4ParseAndRender(text: []const u8) !void {
123 try testing.expectEqualStrings(text, without_port);123 try testing.expectEqualStrings(text, without_port);
124}124}
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
126test "resolve DNS" {142test "resolve DNS" {
127 const io = testing.io;143 const io = testing.io;
128144