@@ -61,39 +61,51 @@ pub fn addValues(self: *ConfigHeaderStep, values: anytype) void {
61
61
62
62
fn addValuesInner (self : * ConfigHeaderStep , values : anytype ) ! void {
63
63
inline for (@typeInfo (@TypeOf (values )).Struct .fields ) | field | {
64
- switch (@typeInfo (field .type )) {
65
- .Null = > {
66
- try self .values .put (field .name , .undef );
67
- },
68
- .Void = > {
69
- try self .values .put (field .name , .defined );
70
- },
71
- .Bool = > {
72
- try self .values .put (field .name , .{ .boolean = @field (values , field .name ) });
73
- },
74
- .ComptimeInt = > {
75
- try self .values .put (field .name , .{ .int = @field (values , field .name ) });
76
- },
77
- .EnumLiteral = > {
78
- try self .values .put (field .name , .{ .ident = @tagName (@field (values , field .name )) });
79
- },
80
- .Pointer = > | ptr | {
81
- switch (@typeInfo (ptr .child )) {
82
- .Array = > | array | {
83
- if (ptr .size == .One and array .child == u8 ) {
84
- try self .values .put (field .name , .{ .string = @field (values , field .name ) });
85
- continue ;
86
- }
87
- },
88
- else = > {},
89
- }
64
+ try putValue (self , field .name , field .type , @field (values , field .name ));
65
+ }
66
+ }
90
67
91
- @compileError ("unsupported ConfigHeaderStep value type: " ++
92
- @typeName (field .type ));
93
- },
94
- else = > @compileError ("unsupported ConfigHeaderStep value type: " ++
95
- @typeName (field .type )),
96
- }
68
+ fn putValue (self : * ConfigHeaderStep , field_name : []const u8 , comptime T : type , v : T ) ! void {
69
+ switch (@typeInfo (T )) {
70
+ .Null = > {
71
+ try self .values .put (field_name , .undef );
72
+ },
73
+ .Void = > {
74
+ try self .values .put (field_name , .defined );
75
+ },
76
+ .Bool = > {
77
+ try self .values .put (field_name , .{ .boolean = v });
78
+ },
79
+ .Int = > {
80
+ try self .values .put (field_name , .{ .int = v });
81
+ },
82
+ .ComptimeInt = > {
83
+ try self .values .put (field_name , .{ .int = v });
84
+ },
85
+ .EnumLiteral = > {
86
+ try self .values .put (field_name , .{ .ident = @tagName (v ) });
87
+ },
88
+ .Optional = > {
89
+ if (v ) | x | {
90
+ return putValue (self , field_name , @TypeOf (x ), x );
91
+ } else {
92
+ try self .values .put (field_name , .undef );
93
+ }
94
+ },
95
+ .Pointer = > | ptr | {
96
+ switch (@typeInfo (ptr .child )) {
97
+ .Array = > | array | {
98
+ if (ptr .size == .One and array .child == u8 ) {
99
+ try self .values .put (field_name , .{ .string = v });
100
+ return ;
101
+ }
102
+ },
103
+ else = > {},
104
+ }
105
+
106
+ @compileError ("unsupported ConfigHeaderStep value type: " ++ @typeName (T ));
107
+ },
108
+ else = > @compileError ("unsupported ConfigHeaderStep value type: " ++ @typeName (T )),
97
109
}
98
110
}
99
111
0 commit comments