From 521b0deaf62e0c31659b326c071d5438ab4e3652 Mon Sep 17 00:00:00 2001 From: Rene Schallner Date: Sat, 30 Dec 2023 00:51:05 +0100 Subject: [PATCH] added docs & docserver --- build.zig | 37 +++++++++++++++++++++++++++++++++++++ tools/docserver.zig | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 tools/docserver.zig diff --git a/build.zig b/build.zig index 99de8ea..63e28aa 100644 --- a/build.zig +++ b/build.zig @@ -21,6 +21,21 @@ pub fn build(b: *std.build.Builder) !void { const all_step = b.step("all", "build all examples"); + // -- Docs + const docs_obj = b.addObject(.{ + .name = "docs", + .root_source_file = .{ .path = "src/zap.zig" }, + .target = target, + .optimize = .Debug, + }); + const install_docs = b.addInstallDirectory(.{ + .install_dir = .prefix, + .install_subdir = "docs", + .source_dir = docs_obj.getEmittedDocs(), + }); + b.step("docs", "Build docs").dependOn(&install_docs.step); + // -- + inline for ([_]struct { name: []const u8, src: []const u8, @@ -198,6 +213,28 @@ pub fn build(b: *std.build.Builder) !void { pkghash_step.dependOn(&pkghash_build_step.step); all_step.dependOn(&pkghash_build_step.step); + // + // docserver + // + const docserver_exe = b.addExecutable(.{ + .name = "docserver", + .root_source_file = .{ .path = "./tools/docserver.zig" }, + .target = target, + .optimize = optimize, + }); + docserver_exe.linkLibrary(facilio); + docserver_exe.addModule("zap", zap_module); + var docserver_step = b.step("docserver", "Build docserver"); + const docserver_build_step = b.addInstallArtifact(docserver_exe, .{}); + docserver_step.dependOn(&docserver_build_step.step); + docserver_step.dependOn(&install_docs.step); + + const docserver_run_step = b.step("run-docserver", "run the docserver"); + const docserver_run = b.addRunArtifact(docserver_exe); + docserver_run_step.dependOn(&docserver_run.step); + + all_step.dependOn(&docserver_build_step.step); + // // announceybot // diff --git a/tools/docserver.zig b/tools/docserver.zig new file mode 100644 index 0000000..7697e19 --- /dev/null +++ b/tools/docserver.zig @@ -0,0 +1,44 @@ +const std = @import("std"); +const zap = @import("zap"); + +fn on_request(r: zap.SimpleRequest) void { + r.setStatus(.not_found); + r.sendBody("

404 - File not found

") catch return; +} + +pub fn main() !void { + var args_it = std.process.args(); + var port: usize = 8080; + var docs_dir: []const u8 = "zig-out/docs"; + + while (args_it.next()) |arg| { + if (std.mem.startsWith(u8, arg, "--port=")) { + // try to parse port + if (std.fmt.parseUnsigned(usize, arg[7..], 0)) |the_port| { + port = the_port; + } else |_| { + std.debug.print("Invalid port number. Using default port {}\n", .{port}); + } + } + + if (std.mem.startsWith(u8, arg, "--docs=")) { + docs_dir = arg[7..]; + } + } + + var listener = zap.SimpleHttpListener.init(.{ + .port = port, + .on_request = on_request, + .public_folder = docs_dir, + .log = true, + }); + try listener.listen(); + + std.debug.print("\nServing docs from {s} at 0.0.0.0:{}\n", .{ docs_dir, port }); + + // start worker threads + zap.start(.{ + .threads = 2, + .workers = 1, + }); +}