@@ -61,39 +61,51 @@ pub fn addValues(self: *ConfigHeaderStep, values: anytype) void {
6161
6262fn addValuesInner (self : * ConfigHeaderStep , values : anytype ) ! void {
6363 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+ }
9067
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 )),
97109 }
98110}
99111
0 commit comments