authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-03-03 01:55:02 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-03-03 01:55:02 -08:00
log72f75d6dbb89600e88e5bd04c2d945c70fdf3ac1
treeaed63697b9a6d51fdf403916b86231f84da7de58
parent2e9575197c909d8acf128ed5627db2a53765abd5
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

add URL.searchParams()


2 files changed, 20 insertions(+), 0 deletions(-)

test.zig+11
......@@ -1,5 +1,6 @@
11const std = @import("std");
22const url = @import("url");
3const expect = @import("expect").expect;
34
45test {
56 _ = @import("./zig-out/test.zig");
......@@ -8,3 +9,13 @@ test {
89test {
910 _ = @import("./test.SearchParams.zig");
1011}
12
13test {
14 const allocator = std.testing.allocator;
15 const u = try url.URL.parse(allocator, "https://en.wikipedia.org/w/index.php?title=URL", null);
16 defer allocator.free(u.href);
17 try expect(u.host).toEqualString("en.wikipedia.org");
18 var search = try u.searchParams(allocator);
19 defer search.deinit();
20 try expect(search.get("title")).toEqualString("URL");
21}
url.zig+9
......@@ -971,6 +971,10 @@ pub const URL = struct {
971971 if (std.mem.eql(u8, s, "wss")) return 443;
972972 return null;
973973 }
974
975 pub fn searchParams(u: *const URL, allocator: std.mem.Allocator) !SearchParams {
976 return .initFromString(allocator, u.query());
977 }
974978};
975979
976980pub const SearchParams = struct {
......@@ -998,6 +1002,11 @@ pub const SearchParams = struct {
9981002 return uv;
9991003 }
10001004
1005 pub fn deinit(self: *SearchParams) void {
1006 for (self.inner.items(.value)) |x| self.allocator.free(x);
1007 self.inner.clearAndFree(self.allocator);
1008 }
1009
10011010 const RawIterator = struct {
10021011 input: string,
10031012 iter: std.mem.SplitIterator(u8, .scalar),