feature. See also
. The project being documented here (as the example) is the Zig library itself.
Fetch.Resource
const Resource = union(enum)
File
Code
const Resource = union(enum) {
file: Io.File.Reader,
http_request: HttpRequest,
git: Git,
dir: Io.Dir,
const Git = struct {
session: git.Session,
fetch_stream: git.Session.FetchStream,
want_oid: git.Oid,
};
const HttpRequest = struct {
request: std.http.Client.Request,
response: std.http.Client.Response,
transfer_buffer: []u8,
decompress: std.http.Decompress,
decompress_buffer: []u8,
};
fn deinit(resource: *Resource, io: Io) void {
switch (resource.*) {
.file => |*file_reader| file_reader.file.close(io),
.http_request => |*http_request| http_request.request.deinit(),
.git => |*git_resource| {
git_resource.fetch_stream.deinit();
},
.dir => |*dir| dir.close(io),
}
resource.* = undefined;
}
fn reader(resource: *Resource) *Io.Reader {
return switch (resource.*) {
.file => |*file_reader| return &file_reader.interface,
.http_request => |*http_request| return http_request.response.readerDecompressing(
http_request.transfer_buffer,
&http_request.decompress,
http_request.decompress_buffer,
),
.git => |*g| return &g.fetch_stream.reader,
.dir => unreachable,
};
}
}