summaryrefslogtreecommitdiff
path: root/clap/types.zig
diff options
context:
space:
mode:
authorGravatar Jimmi Holst Christensen2024-11-08 15:50:45 +0100
committerGravatar Jimmi Holst Christensen2024-11-20 15:43:12 +0100
commit4fdf3969cfbb26fcb16b1107f25c679441eb47f9 (patch)
treecf0b2e6a228b247b2969224db916fd8d4891a18e /clap/types.zig
parentchore: Update to latest version of zig (diff)
downloadzig-clap-4fdf3969cfbb26fcb16b1107f25c679441eb47f9.tar.gz
zig-clap-4fdf3969cfbb26fcb16b1107f25c679441eb47f9.tar.xz
zig-clap-4fdf3969cfbb26fcb16b1107f25c679441eb47f9.zip
WIP: zig-clap v2
Diffstat (limited to 'clap/types.zig')
-rw-r--r--clap/types.zig59
1 files changed, 59 insertions, 0 deletions
diff --git a/clap/types.zig b/clap/types.zig
new file mode 100644
index 0000000..926659a
--- /dev/null
+++ b/clap/types.zig
@@ -0,0 +1,59 @@
1pub fn isArrayListUnmanaged(comptime T: type) bool {
2 if (@typeInfo(T) != .@"struct" or !@hasDecl(T, "Slice"))
3 return false;
4
5 const ptr_info = switch (@typeInfo(T.Slice)) {
6 .pointer => |info| info,
7 else => return false,
8 };
9
10 return T == std.ArrayListAlignedUnmanaged(ptr_info.child, null) or
11 T == std.ArrayListAlignedUnmanaged(ptr_info.child, ptr_info.alignment);
12}
13
14test isArrayListUnmanaged {
15 try std.testing.expect(!isArrayListUnmanaged(u8));
16 try std.testing.expect(!isArrayListUnmanaged([]const u8));
17 try std.testing.expect(!isArrayListUnmanaged(struct {
18 pub const Slice = []const u8;
19 }));
20 try std.testing.expect(isArrayListUnmanaged(std.ArrayListUnmanaged(u8)));
21}
22
23pub fn allFieldsHaveDefaults(comptime T: type) bool {
24 const info = switch (@typeInfo(T)) {
25 .@"struct" => |s| s,
26 else => return false,
27 };
28
29 inline for (info.fields) |field| {
30 if (field.default_value == null)
31 return false;
32 }
33
34 return true;
35}
36
37test allFieldsHaveDefaults {
38 try std.testing.expect(!allFieldsHaveDefaults(u8));
39 try std.testing.expect(!allFieldsHaveDefaults([]const u8));
40 try std.testing.expect(allFieldsHaveDefaults(struct {}));
41 try std.testing.expect(allFieldsHaveDefaults(struct {
42 a: u8 = 0,
43 }));
44 try std.testing.expect(!allFieldsHaveDefaults(struct {
45 a: u8,
46 }));
47 try std.testing.expect(!allFieldsHaveDefaults(struct {
48 a: u8,
49 b: u8 = 0,
50 c: u8,
51 }));
52 try std.testing.expect(allFieldsHaveDefaults(struct {
53 a: u8 = 1,
54 b: u8 = 0,
55 c: u8 = 3,
56 }));
57}
58
59const std = @import("std");