From 72f75d6dbb89600e88e5bd04c2d945c70fdf3ac1 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Tue, 3 Mar 2026 01:55:02 -0800 Subject: [PATCH] add URL.searchParams() --- test.zig | 11 +++++++++++ url.zig | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/test.zig b/test.zig index d8f3b4026161a9b87ddfa3aeae5d88e324e2aed2..413a3c57658671686e7e46e20bd87b08834b3307 100644 --- a/test.zig +++ b/test.zig @@ -1,5 +1,6 @@ const std = @import("std"); const url = @import("url"); +const expect = @import("expect").expect; test { _ = @import("./zig-out/test.zig"); @@ -8,3 +9,13 @@ test { test { _ = @import("./test.SearchParams.zig"); } + +test { + const allocator = std.testing.allocator; + const u = try url.URL.parse(allocator, "https://en.wikipedia.org/w/index.php?title=URL", null); + defer allocator.free(u.href); + try expect(u.host).toEqualString("en.wikipedia.org"); + var search = try u.searchParams(allocator); + defer search.deinit(); + try expect(search.get("title")).toEqualString("URL"); +} diff --git a/url.zig b/url.zig index 72f78d5940e8f14d6fa989c4c8a7396cb95ef30e..f971cbe221fcfe9c73528609e1e9ee79ffcc816e 100644 --- a/url.zig +++ b/url.zig @@ -971,6 +971,10 @@ pub const URL = struct { if (std.mem.eql(u8, s, "wss")) return 443; return null; } + + pub fn searchParams(u: *const URL, allocator: std.mem.Allocator) !SearchParams { + return .initFromString(allocator, u.query()); + } }; pub const SearchParams = struct { @@ -998,6 +1002,11 @@ pub const SearchParams = struct { return uv; } + pub fn deinit(self: *SearchParams) void { + for (self.inner.items(.value)) |x| self.allocator.free(x); + self.inner.clearAndFree(self.allocator); + } + const RawIterator = struct { input: string, iter: std.mem.SplitIterator(u8, .scalar), -- 2.54.0