1const std = @import("std");
2const string = []const u8;
3const extras = @import("./lib.zig");
4
5pub fn omit(value: anytype, comptime field_name: []const u8) Omit(@TypeOf(value), field_name) {
6 const T = @TypeOf(value);
7 var result: Omit(T, field_name) = undefined;
8 inline for (comptime std.meta.fields(T)) |f| {
9 if (comptime std.mem.eql(u8, f.name, field_name)) continue;
10 @field(result, f.name) = @field(value, f.name);
11 }
12 return result;
13}
14
15pub fn Omit(T: type, field_name: []const u8) type {
16 const fields_original = std.meta.fields(T);
17 const len = fields_original.len - 1;
18 var names: [len][]const u8 = undefined;
19 var types: [len]type = undefined;
20 var attrs: [len]std.builtin.Type.StructField.Attributes = undefined;
21 var i: usize = 0;
22 for (fields_original) |f| {
23 if (std.mem.eql(u8, f.name, field_name)) continue;
24 names[i] = f.name;
25 types[i] = f.type;
26 attrs[i] = .{
27 .@"comptime" = f.is_comptime,
28 .@"align" = f.alignment,
29 .default_value_ptr = f.default_value_ptr,
30 };
31 i += 1;
32 }
33 return @Struct(.auto, null, &names, &types, &attrs);
34}