about summary refs log tree commit diff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig
index 1c62501..219bf1d 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -167,6 +167,9 @@ const Builder = struct {
         if (std.mem.startsWith(u8, source_stem, "meta.tilde")) {
             return try self.metaTilde(io, gpa);
         }
+        if (std.mem.startsWith(u8, source_stem, "meta.feed")) {
+            return try self.metaFeed(io, gpa);
+        }
 
         // target file
         const target_path = try std.fmt.allocPrint(gpa, "{s}.html", .{source_stem});
@@ -387,6 +390,23 @@ const Builder = struct {
         try self.finalize(gpa, target_fd);
         log.debug("{s}: done", .{self.source.path});
     }
+
+    // TODO: could also be a generic way to allow arbitrary templated files
+    fn metaFeed(self: *Builder, io: Io, gpa: Allocator) !void {
+        const source_stem = std.fs.path.basename(self.source.path)[5..]; // trim "meta."
+        log.debug("meta.feed : {s}", .{source_stem});
+
+        const target_fd = try self.target_dir.createFile(io, source_stem, .{ .lock = .exclusive });
+        defer target_fd.close(io);
+        if (try targetExists(io, gpa, target_fd, self.root_dir)) return;
+
+        var buffer: [BUFFER_SIZE]u8 = undefined;
+        var writer = target_fd.writer(io, &buffer);
+
+        try self.inject(io, gpa, self.source, &writer.interface);
+        try self.finalize(gpa, target_fd);
+        log.debug("{s}: done", .{self.source.path});
+    }
 };
 
 // helpers