mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
add CachedResponse variant to Response
This commit is contained in:
@@ -32,6 +32,9 @@ const Robots = @import("../network/Robots.zig");
|
|||||||
const RobotStore = Robots.RobotStore;
|
const RobotStore = Robots.RobotStore;
|
||||||
const WebBotAuth = @import("../network/WebBotAuth.zig");
|
const WebBotAuth = @import("../network/WebBotAuth.zig");
|
||||||
|
|
||||||
|
const Cache = @import("../network/cache/Cache.zig");
|
||||||
|
const CachedResponse = Cache.CachedResponse;
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const ArenaAllocator = std.heap.ArenaAllocator;
|
const ArenaAllocator = std.heap.ArenaAllocator;
|
||||||
|
|
||||||
@@ -997,57 +1000,74 @@ pub const Response = struct {
|
|||||||
ctx: *anyopaque,
|
ctx: *anyopaque,
|
||||||
inner: union(enum) {
|
inner: union(enum) {
|
||||||
live: *LiveTransfer,
|
live: *LiveTransfer,
|
||||||
|
cached: *const CachedResponse,
|
||||||
},
|
},
|
||||||
|
|
||||||
pub fn fromLive(transfer: *LiveTransfer) Response {
|
pub fn fromLive(transfer: *LiveTransfer) Response {
|
||||||
return .{ .ctx = transfer.req.ctx, .inner = .{ .live = transfer } };
|
return .{ .ctx = transfer.req.ctx, .inner = .{ .live = transfer } };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn fromCached(ctx: *anyopaque, resp: *const CachedResponse) Response {
|
||||||
|
return .{ .ctx = ctx, .inner = .{ .cached = resp } };
|
||||||
|
}
|
||||||
|
|
||||||
pub fn status(self: Response) ?u16 {
|
pub fn status(self: Response) ?u16 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| if (live.response_header) |rh| rh.status else null,
|
.live => |live| if (live.response_header) |rh| rh.status else null,
|
||||||
|
.cached => |c| c.metadata.status,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contentType(self: Response) ?[]const u8 {
|
pub fn contentType(self: Response) ?[]const u8 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| if (live.response_header) |*rh| rh.contentType() else null,
|
.live => |live| if (live.response_header) |*rh| rh.contentType() else null,
|
||||||
|
.cached => |c| c.metadata.content_type,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contentLength(self: Response) ?u32 {
|
pub fn contentLength(self: Response) ?u32 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| live.getContentLength(),
|
.live => |live| live.getContentLength(),
|
||||||
|
.cached => |c| switch (c.data) {
|
||||||
|
.buffer => |buf| @intCast(buf.len),
|
||||||
|
.file => |f| @intCast(f.getEndPos() catch 0),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn redirectCount(self: Response) ?u32 {
|
pub fn redirectCount(self: Response) ?u32 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| if (live.response_header) |rh| rh.redirect_count else null,
|
.live => |live| if (live.response_header) |rh| rh.redirect_count else null,
|
||||||
|
.cached => 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn url(self: Response) [:0]const u8 {
|
pub fn url(self: Response) [:0]const u8 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| live.url,
|
.live => |live| live.url,
|
||||||
|
.cached => |c| c.metadata.url,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn headerIterator(self: Response) HeaderIterator {
|
pub fn headerIterator(self: Response) HeaderIterator {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| live.responseHeaderIterator(),
|
.live => |live| live.responseHeaderIterator(),
|
||||||
|
// TODO: Cache HTTP Headers
|
||||||
|
.cached => unreachable,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn abort(self: Response, err: anyerror) void {
|
pub fn abort(self: Response, err: anyerror) void {
|
||||||
switch (self.inner) {
|
switch (self.inner) {
|
||||||
.live => |live| live.abort(err),
|
.live => |live| live.abort(err),
|
||||||
|
.cached => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn terminate(self: Response) void {
|
pub fn terminate(self: Response) void {
|
||||||
switch (self.inner) {
|
switch (self.inner) {
|
||||||
.live => |live| live.terminate(),
|
.live => |live| live.terminate(),
|
||||||
|
.cached => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user