authorgravatar for alex_naskos@hotmail.comAlexandros Naskos <alex_naskos@hotmail.com> 2020-11-06 10:45:49+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-11-18 13:16:56+02:00
log252924ae33cbdd65ef0bc5d878a2dad57fb1ada6
tree698f94eb1d9d73e662150f45ae1f6208f9fedcdf
parent6d5b76a75d204ac2ce9fb2e03744d9733169dbe3

Added std.meta.fieldNames


1 files changed, 41 insertions(+), 0 deletions(-)

lib/std/meta.zig+41
......@@ -413,6 +413,47 @@ test "std.meta.fieldInfo" {
413413 testing.expect(comptime uf.field_type == u8);
414414}
415415
416pub fn fieldNames(comptime T: type) *const [fields(T).len][]const u8 {
417 comptime {
418 const fieldInfos = fields(T);
419 var names: [fieldInfos.len][]const u8 = undefined;
420 for (fieldInfos) |field, i| {
421 names[i] = field.name;
422 }
423 return &names;
424 }
425}
426
427test "std.meta.fieldNames" {
428 const E1 = enum {
429 A, B
430 };
431 const E2 = error{A};
432 const S1 = struct {
433 a: u8,
434 };
435 const U1 = union {
436 a: u8,
437 b: void,
438 };
439
440 const e1names = fieldNames(E1);
441 const e2names = fieldNames(E2);
442 const s1names = fieldNames(S1);
443 const u1names = fieldNames(U1);
444
445 testing.expect(e1names.len == 2);
446 testing.expectEqualSlices(u8, e1names[0], "A");
447 testing.expectEqualSlices(u8, e1names[1], "B");
448 testing.expect(e2names.len == 1);
449 testing.expectEqualSlices(u8, e2names[0], "A");
450 testing.expect(s1names.len == 1);
451 testing.expectEqualSlices(u8, s1names[0], "a");
452 testing.expect(u1names.len == 2);
453 testing.expectEqualSlices(u8, u1names[0], "a");
454 testing.expectEqualSlices(u8, u1names[1], "b");
455}
456
416457pub fn TagType(comptime T: type) type {
417458 return switch (@typeInfo(T)) {
418459 .Enum => |info| info.tag_type,