const std = @import("std"); const zap = @import("zap"); var buffer: [1024]u8 = undefined; var read_len: ?usize = null; const testfile = @embedFile("testfile.txt"); pub fn on_request(r: zap.Request) !void { // Sends a file if present in the filesystem orelse returns an error. // // - efficiently sends a file using gzip compression // - also handles range requests if `Range` or `If-Range` headers are present in the request. // - sends the response headers and the specified file (the response's body). // // On success, the `r.h` handle will be consumed and invalid. // On error, the handle will still be valid and should be used to send an error response // // Important: sets last-modified and cache-control headers with a max-age value of 1 hour! // In this example, we disable caching r.setHeader("Cache-Control", "no-cache") catch unreachable; if (r.sendFile("examples/sendfile/testfile.txt")) {} else |err| { std.log.err("Unable to send file: {any}", .{err}); } } pub fn main() !void { // setup listener var listener = zap.HttpListener.init( .{ .port = 3000, .on_request = on_request, .log = true, .max_clients = 10, .max_body_size = 1 * 1024, // careful here }, ); zap.enableDebugLog(); try listener.listen(); std.debug.print("Visit me on http://127.0.0.1:3000\n", .{}); zap.start(.{ .threads = 1, .workers = 1, }); }