use format mixin for bit-flags

This commit is contained in:
Christofer Nolander
2023-08-23 22:12:17 +02:00
parent 5b99c4992a
commit 2287412536

View File

@@ -49,7 +49,33 @@ const preamble =
\\ pub fn contains(lhs: FlagsType, rhs: FlagsType) bool { \\ pub fn contains(lhs: FlagsType, rhs: FlagsType) bool {
\\ return toInt(intersect(lhs, rhs)) == toInt(rhs); \\ return toInt(intersect(lhs, rhs)) == toInt(rhs);
\\ } \\ }
++ bit_flag_format ++ \\ pub usingnamespace FlagFormatMixin(FlagsType);
\\ };
\\}
\\fn FlagFormatMixin(comptime FlagsType: type) type {
\\ return struct {
\\ pub fn format(
\\ self: FlagsType,
\\ comptime _: []const u8,
\\ _: std.fmt.FormatOptions,
\\ writer: anytype,
\\ ) !void {
\\ try writer.writeAll(@typeName(FlagsType) ++ "{");
\\ var first = true;
\\ inline for (comptime std.meta.fieldNames(FlagsType)) |name| {
\\ if (name[0] == '_') continue;
\\ if (@field(self, name)) {
\\ if (first) {
\\ try writer.writeAll(" " ++ name);
\\ first = false;
\\ } else {
\\ try writer.writeAll(", " ++ name);
\\ }
\\ }
\\ }
\\ if (!first) try writer.writeAll(" ");
\\ try writer.writeAll("}");
\\ }
\\ }; \\ };
\\} \\}
\\pub fn makeApiVersion(variant: u3, major: u7, minor: u10, patch: u12) u32 { \\pub fn makeApiVersion(variant: u3, major: u7, minor: u10, patch: u12) u32 {
@@ -70,31 +96,6 @@ const preamble =
\\ \\
; ;
const bit_flag_format =
\\ pub fn format(
\\ self: @This(),
\\ comptime _: []const u8,
\\ _: std.fmt.FormatOptions,
\\ writer: anytype,
\\ ) !void {
\\ try writer.writeAll(@typeName(@This()) ++ "{");
\\ var first = true;
\\ inline for (comptime std.meta.fieldNames(@This())) |name| {
\\ if (name[0] == '_') continue;
\\ if (@field(self, name)) {
\\ if (first) {
\\ try writer.writeAll(" " ++ name);
\\ first = false;
\\ } else {
\\ try writer.writeAll(", " ++ name);
\\ }
\\ }
\\ }
\\ if (!first) try writer.writeAll(" ");
\\ try writer.writeAll("}");
\\ }
;
const builtin_types = std.ComptimeStringMap([]const u8, .{ const builtin_types = std.ComptimeStringMap([]const u8, .{
.{ "void", @typeName(void) }, .{ "void", @typeName(void) },
.{ "char", @typeName(u8) }, .{ "char", @typeName(u8) },
@@ -1086,7 +1087,7 @@ fn Renderer(comptime WriterType: type) type {
\\ } \\ }
\\ return true; \\ return true;
\\ } \\ }
++ bit_flag_format ++ \\ pub usingnamespace FlagFormatMixin(CommandFlags);
\\ }; \\ };
\\} \\}
\\ \\