mirror of
https://github.com/jetzig-framework/jetzig.git
synced 2025-05-14 22:16: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 {
|
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`.
|
// 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 };
|
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()`
|
/// Iterates through stored headers yielidng a `Header` on each call to `next()`
|
||||||
const Iterator = struct {
|
const Iterator = struct {
|
||||||
headers: HeadersArray,
|
headers: HeadersArray,
|
||||||
@ -58,14 +70,44 @@ const Iterator = struct {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
test {
|
test "append" {
|
||||||
const allocator = std.testing.allocator;
|
const allocator = std.testing.allocator;
|
||||||
var headers = std.http.Headers.init(allocator);
|
var headers = Self.init(allocator);
|
||||||
defer headers.deinit();
|
defer headers.deinit();
|
||||||
try headers.append("foo", "bar");
|
try headers.append("foo", "bar");
|
||||||
var jetzig_headers = Self.init(allocator, headers);
|
try std.testing.expectEqualStrings(headers.getFirstValue("foo").?, "bar");
|
||||||
try std.testing.expectEqualStrings(
|
}
|
||||||
headers.getFirstValue("foo").?,
|
|
||||||
jetzig_headers.getFirstValue("foo").?,
|
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);
|
try self.response.headers.append("Set-Cookie", header);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Move to jetzig.http.Response.stdHeaders()
|
var std_response_headers = try self.response.headers.stdHeaders();
|
||||||
var std_response_headers = std.ArrayList(std.http.Header).init(self.allocator);
|
defer std_response_headers.deinit(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 },
|
|
||||||
);
|
|
||||||
|
|
||||||
try self.std_http_request.respond(
|
try self.std_http_request.respond(
|
||||||
self.response.content,
|
self.response.content,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user