//! Auto-generated by pugz.compileTemplates() //! Do not edit manually - regenerate by running: zig build const std = @import("std"); const Allocator = std.mem.Allocator; const ArrayList = std.ArrayList(u8); // ───────────────────────────────────────────────────────────────────────────── // Helpers // ───────────────────────────────────────────────────────────────────────────── const esc_lut: [256]?[]const u8 = blk: { var t: [256]?[]const u8 = .{null} ** 256; t['&'] = "&"; t['<'] = "<"; t['>'] = ">"; t['"'] = """; t['\''] = "'"; break :blk t; }; fn esc(o: *ArrayList, a: Allocator, s: []const u8) Allocator.Error!void { var i: usize = 0; for (s, 0..) |c, j| { if (esc_lut[c]) |e| { if (j > i) try o.appendSlice(a, s[i..j]); try o.appendSlice(a, e); i = j + 1; } } if (i < s.len) try o.appendSlice(a, s[i..]); } fn truthy(v: anytype) bool { return switch (@typeInfo(@TypeOf(v))) { .bool => v, .optional => v != null, .pointer => |p| if (p.size == .slice) v.len > 0 else true, .int, .comptime_int => v != 0, else => true, }; } var int_buf: [32]u8 = undefined; fn strVal(v: anytype) []const u8 { const T = @TypeOf(v); switch (@typeInfo(T)) { .pointer => |p| switch (p.size) { .slice => return v, .one => { // For pointer-to-array, slice it const child_info = @typeInfo(p.child); if (child_info == .array) { const arr_info = child_info.array; const ptr: [*]const arr_info.child = @ptrCast(v); return ptr[0..arr_info.len]; } return strVal(v.*); }, else => @compileError("unsupported pointer type"), }, .array => @compileError("arrays must be passed by pointer"), .int, .comptime_int => return std.fmt.bufPrint(&int_buf, "{d}", .{v}) catch "0", .optional => return if (v) |val| strVal(val) else "", else => @compileError("strVal: unsupported type " ++ @typeName(T)), } } // ───────────────────────────────────────────────────────────────────────────── // Templates // ───────────────────────────────────────────────────────────────────────────── pub fn simple_2(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; try o.appendSlice(a, "

"); try esc(&o, a, strVal(@field(d, "header"))); try o.appendSlice(a, "

"); try esc(&o, a, strVal(@field(d, "header2"))); try o.appendSlice(a, "

"); try esc(&o, a, strVal(@field(d, "header3"))); try o.appendSlice(a, "

"); try esc(&o, a, strVal(@field(d, "header4"))); try o.appendSlice(a, "

"); try esc(&o, a, strVal(@field(d, "header5"))); try o.appendSlice(a, "
"); try esc(&o, a, strVal(@field(d, "header6"))); try o.appendSlice(a, "
"); return o.items; } pub fn simple_1(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; try o.appendSlice(a, "
Hello "); try esc(&o, a, strVal(@field(d, "name"))); try o.appendSlice(a, "!You have "); try esc(&o, a, strVal(@field(d, "messageCount"))); try o.appendSlice(a, " messages!"); if (truthy(@field(d, "colors"))) { try o.appendSlice(a, ""); } else { try o.appendSlice(a, "
No colors!
"); } try o.appendSlice(a, "
"); if (truthy(@field(d, "primary"))) { try o.appendSlice(a, ""); } else { try o.appendSlice(a, ""); } try o.appendSlice(a, "
"); return o.items; } pub fn simple_0(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; try o.appendSlice(a, "

Hello, "); try esc(&o, a, strVal(@field(d, "name"))); try o.appendSlice(a, "

"); return o.items; } pub fn projects_escaped(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; try o.appendSlice(a, ""); try esc(&o, a, strVal(@field(d, "title"))); try o.appendSlice(a, "

"); try esc(&o, a, strVal(@field(d, "text"))); try o.appendSlice(a, "

"); if (@field(d, "projects").len > 0) { for (@field(d, "projects")) |project| { try o.appendSlice(a, "

"); try esc(&o, a, strVal(project.description)); try o.appendSlice(a, "

"); } } else { try o.appendSlice(a, "

No projects

"); } try o.appendSlice(a, ""); return o.items; } pub fn friends(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; try o.appendSlice(a, "Friends
"); for (@field(d, "friends")) |friend| { try o.appendSlice(a, "
  • Name: "); try esc(&o, a, strVal(friend.name)); try o.appendSlice(a, "
  • Balance: "); try esc(&o, a, strVal(friend.balance)); try o.appendSlice(a, "
  • Age: "); try esc(&o, a, strVal(friend.age)); try o.appendSlice(a, "
  • Address: "); try esc(&o, a, strVal(friend.address)); try o.appendSlice(a, "
  • Image:
  • Company: "); try esc(&o, a, strVal(friend.company)); try o.appendSlice(a, "
  • Email:
  • About: "); try esc(&o, a, strVal(friend.about)); try o.appendSlice(a, "
  • "); if (truthy(friend.tags)) { try o.appendSlice(a, "
  • Tags:
      "); for (if (@typeInfo(@TypeOf(friend.tags)) == .optional) (friend.tags orelse &.{}) else friend.tags) |tag| { try o.appendSlice(a, "
    • "); try esc(&o, a, strVal(tag)); try o.appendSlice(a, "
    • "); } try o.appendSlice(a, "
  • "); } if (truthy(friend.friends)) { try o.appendSlice(a, "
  • Friends:
      "); for (if (@typeInfo(@TypeOf(friend.friends)) == .optional) (friend.friends orelse &.{}) else friend.friends) |subFriend| { try o.appendSlice(a, "
    • "); try esc(&o, a, strVal(subFriend.name)); try o.appendSlice(a, " ("); try esc(&o, a, strVal(subFriend.id)); try o.appendSlice(a, ")
    • "); } try o.appendSlice(a, "
  • "); } try o.appendSlice(a, "
"); } try o.appendSlice(a, "
"); return o.items; } pub fn search_results(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; try o.appendSlice(a, "
"); for (@field(d, "searchRecords")) |searchRecord| { try o.appendSlice(a, "

"); try esc(&o, a, strVal(searchRecord.title)); try o.appendSlice(a, "

"); try esc(&o, a, strVal(searchRecord.description)); if (truthy(searchRecord.featured)) { try o.appendSlice(a, "
Featured!
"); } if (truthy(searchRecord.sizes)) { try o.appendSlice(a, "
Sizes available:
    "); for (if (@typeInfo(@TypeOf(searchRecord.sizes)) == .optional) (searchRecord.sizes orelse &.{}) else searchRecord.sizes) |size| { try o.appendSlice(a, "
  • "); try esc(&o, a, strVal(size)); try o.appendSlice(a, "
  • "); } try o.appendSlice(a, "
"); } try o.appendSlice(a, "
"); } try o.appendSlice(a, "
"); return o.items; } pub fn if_expression(a: Allocator, d: anytype) Allocator.Error![]u8 { var o: ArrayList = .empty; for (@field(d, "accounts")) |account| { try o.appendSlice(a, "
"); if (std.mem.eql(u8, strVal(account.status), "closed")) { try o.appendSlice(a, "
Your account has been closed!
"); } if (std.mem.eql(u8, strVal(account.status), "suspended")) { try o.appendSlice(a, "
Your account has been temporarily suspended
"); } if (std.mem.eql(u8, strVal(account.status), "open")) { try o.appendSlice(a, "
Bank balance:"); if (truthy(account.negative)) { try o.appendSlice(a, ""); try esc(&o, a, strVal(account.balanceFormatted)); try o.appendSlice(a, ""); } else { try o.appendSlice(a, ""); try esc(&o, a, strVal(account.balanceFormatted)); try o.appendSlice(a, ""); } try o.appendSlice(a, "
"); } try o.appendSlice(a, "
"); } return o.items; } pub const template_names = [_][]const u8{ "simple_2", "simple_1", "simple_0", "projects_escaped", "friends", "search_results", "if_expression", };