mirror of
https://github.com/jetzig-framework/jetzig.git
synced 2025-05-14 14:06:08 +00:00
Simplify headers assignment, fix tests
This commit is contained in:
parent
cc39608d46
commit
ce93abcd65
@ -15,7 +15,7 @@ pub fn init(allocator: std.mem.Allocator) Self {
|
||||
}
|
||||
|
||||
pub fn deinit(self: *Self) void {
|
||||
self.headers.deinit();
|
||||
self.headers.deinit(self.allocator);
|
||||
}
|
||||
|
||||
// Gets the first value for a given header identified by `name`.
|
||||
@ -36,6 +36,18 @@ pub fn iterator(self: *Self) Iterator {
|
||||
return Iterator{ .headers = self.headers };
|
||||
}
|
||||
|
||||
/// Returns an array of `std.http.Header`, can be used to set response headers directly.
|
||||
/// Caller owns memory.
|
||||
pub fn stdHeaders(self: *Self) !std.ArrayListUnmanaged(std.http.Header) {
|
||||
var array = try std.ArrayListUnmanaged(std.http.Header).initCapacity(self.allocator, max_headers);
|
||||
|
||||
var it = self.iterator();
|
||||
while (it.next()) |header| {
|
||||
array.appendAssumeCapacity(.{ .name = header.name, .value = header.value });
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
/// Iterates through stored headers yielidng a `Header` on each call to `next()`
|
||||
const Iterator = struct {
|
||||
headers: HeadersArray,
|
||||
@ -58,14 +70,44 @@ const Iterator = struct {
|
||||
}
|
||||
};
|
||||
|
||||
test {
|
||||
test "append" {
|
||||
const allocator = std.testing.allocator;
|
||||
var headers = std.http.Headers.init(allocator);
|
||||
var headers = Self.init(allocator);
|
||||
defer headers.deinit();
|
||||
try headers.append("foo", "bar");
|
||||
var jetzig_headers = Self.init(allocator, headers);
|
||||
try std.testing.expectEqualStrings(
|
||||
headers.getFirstValue("foo").?,
|
||||
jetzig_headers.getFirstValue("foo").?,
|
||||
);
|
||||
try std.testing.expectEqualStrings(headers.getFirstValue("foo").?, "bar");
|
||||
}
|
||||
|
||||
test "iterator" {
|
||||
const allocator = std.testing.allocator;
|
||||
var headers = Self.init(allocator);
|
||||
defer headers.deinit();
|
||||
|
||||
try headers.append("foo", "bar");
|
||||
|
||||
var it = headers.iterator();
|
||||
while (it.next()) |header| {
|
||||
try std.testing.expectEqualStrings("foo", header.name);
|
||||
try std.testing.expectEqualStrings("bar", header.value);
|
||||
break;
|
||||
} else {
|
||||
try std.testing.expect(false);
|
||||
}
|
||||
}
|
||||
|
||||
test "stdHeaders" {
|
||||
const allocator = std.testing.allocator;
|
||||
var headers = Self.init(allocator);
|
||||
defer headers.deinit();
|
||||
|
||||
try headers.append("foo", "bar");
|
||||
try headers.append("baz", "qux");
|
||||
|
||||
var std_headers = try headers.stdHeaders();
|
||||
defer std_headers.deinit(allocator);
|
||||
|
||||
try std.testing.expectEqualStrings("foo", std_headers.items[0].name);
|
||||
try std.testing.expectEqualStrings("bar", std_headers.items[0].value);
|
||||
try std.testing.expectEqualStrings("baz", std_headers.items[1].name);
|
||||
try std.testing.expectEqualStrings("qux", std_headers.items[1].value);
|
||||
}
|
||||
|
@ -137,12 +137,8 @@ pub fn respond(self: *Self) !void {
|
||||
try self.response.headers.append("Set-Cookie", header);
|
||||
}
|
||||
|
||||
// TODO: Move to jetzig.http.Response.stdHeaders()
|
||||
var std_response_headers = std.ArrayList(std.http.Header).init(self.allocator);
|
||||
var headers_it = self.response.headers.iterator();
|
||||
while (headers_it.next()) |header| try std_response_headers.append(
|
||||
.{ .name = header.name, .value = header.value },
|
||||
);
|
||||
var std_response_headers = try self.response.headers.stdHeaders();
|
||||
defer std_response_headers.deinit(self.allocator);
|
||||
|
||||
try self.std_http_request.respond(
|
||||
self.response.content,
|
||||
|
Loading…
x
Reference in New Issue
Block a user