From ebb590250fe630ada7ca83c7870a240969d1fff4 Mon Sep 17 00:00:00 2001 From: Muki Kiboigo Date: Mon, 8 Sep 2025 07:54:25 -0700 Subject: [PATCH] simplify cloning of Req/Resp --- src/browser/fetch/Headers.zig | 6 ------ src/browser/fetch/Request.zig | 14 +++++++------- src/browser/fetch/Response.zig | 14 +++++++------- src/browser/mime.zig | 16 ---------------- 4 files changed, 14 insertions(+), 36 deletions(-) diff --git a/src/browser/fetch/Headers.zig b/src/browser/fetch/Headers.zig index a8e5ed07..2ea412cf 100644 --- a/src/browser/fetch/Headers.zig +++ b/src/browser/fetch/Headers.zig @@ -107,12 +107,6 @@ pub fn constructor(_init: ?HeadersInit, page: *Page) !Headers { }; } -pub fn clone(self: *const Headers, allocator: std.mem.Allocator) !Headers { - return Headers{ - .headers = try self.headers.clone(allocator), - }; -} - pub fn append(self: *Headers, name: []const u8, value: []const u8, allocator: std.mem.Allocator) !void { const gop = try self.headers.getOrPut(allocator, name); diff --git a/src/browser/fetch/Request.zig b/src/browser/fetch/Request.zig index 67c7c104..67dc7cab 100644 --- a/src/browser/fetch/Request.zig +++ b/src/browser/fetch/Request.zig @@ -173,23 +173,23 @@ pub fn get_url(self: *const Request) []const u8 { return self.url; } -pub fn _clone(self: *Request, page: *Page) !Request { +pub fn _clone(self: *Request) !Request { // Not allowed to clone if the body was used. if (self.body_used) { return error.TypeError; } - const arena = page.arena; - + // OK to just return the same fields BECAUSE + // all of these fields are read-only and can't be modified. return Request{ - .body = if (self.body) |body| try arena.dupe(u8, body) else null, + .body = self.body, .body_used = self.body_used, .cache = self.cache, .credentials = self.credentials, - .headers = try self.headers.clone(arena), + .headers = self.headers, .method = self.method, - .integrity = try arena.dupe(u8, self.integrity), - .url = try arena.dupeZ(u8, self.url), + .integrity = self.integrity, + .url = self.url, }; } diff --git a/src/browser/fetch/Response.zig b/src/browser/fetch/Response.zig index e6018906..be7cc8f1 100644 --- a/src/browser/fetch/Response.zig +++ b/src/browser/fetch/Response.zig @@ -109,21 +109,21 @@ pub fn get_url(self: *const Response) []const u8 { return self.url; } -pub fn _clone(self: *const Response, page: *Page) !Response { +pub fn _clone(self: *const Response) !Response { if (self.body_used) { return error.TypeError; } - const arena = page.arena; - + // OK to just return the same fields BECAUSE + // all of these fields are read-only and can't be modified. return Response{ - .body = try arena.dupe(u8, self.body), + .body = self.body, .body_used = self.body_used, - .mime = if (self.mime) |mime| try mime.clone(arena) else null, - .headers = try self.headers.clone(arena), + .mime = self.mime, + .headers = self.headers, .redirected = self.redirected, .status = self.status, - .url = try arena.dupe(u8, self.url), + .url = self.url, }; } diff --git a/src/browser/mime.zig b/src/browser/mime.zig index 468ceb36..33ab9958 100644 --- a/src/browser/mime.zig +++ b/src/browser/mime.zig @@ -290,22 +290,6 @@ pub const Mime = struct { fn trimRight(s: []const u8) []const u8 { return std.mem.trimRight(u8, s, &std.ascii.whitespace); } - - pub fn clone(self: *const Mime, allocator: Allocator) !Mime { - return Mime{ - .content_type = blk: { - switch (self.content_type) { - .other => |data| break :blk ContentType{ .other = .{ - .type = try allocator.dupe(u8, data.type), - .sub_type = try allocator.dupe(u8, data.sub_type), - } }, - else => break :blk self.content_type, - } - }, - .params = try allocator.dupe(u8, self.params), - .charset = if (self.charset) |charset| try allocator.dupeZ(u8, charset) else null, - }; - } }; const testing = @import("../testing.zig");