feature. See also
. The project being documented here (as the example) is the Zig library itself.
Serialize.initArgsList
fn initArgsList(s: *Serialize, args: []const Step.Run.Arg) ![]const Configuration.Step.Run.Arg.Index
File
Code
fn initArgsList(s: *Serialize, args: []const Step.Run.Arg) ![]const Configuration.Step.Run.Arg.Index {
const wc = s.wc;
const result = try s.arena.alloc(Configuration.Step.Run.Arg.Index, args.len);
for (result, args) |*dest, src| {
dest.* = try wc.addExtra(Configuration.Step.Run.Arg, switch (src) {
.artifact => |a| .{
.flags = .{
.tag = .artifact,
.prefix = a.prefix.len != 0,
.suffix = a.suffix.len != 0,
.basename = false,
.path = false,
.producer = true,
.generated = false,
.dep_file = false,
.make_absolute = a.make_absolute,
},
.prefix = .{ .value = if (a.prefix.len != 0) try wc.addString(a.prefix) else null },
.suffix = .{ .value = if (a.suffix.len != 0) try wc.addString(a.suffix) else null },
.basename = .{ .value = null },
.path = .{ .value = null },
.producer = .{ .value = stepIndex(s, &a.artifact.step) },
.generated = .{ .value = null },
},
.lazy_path => |a| .{
.flags = .{
.tag = .path_file,
.prefix = a.prefix.len != 0,
.suffix = a.suffix.len != 0,
.basename = false,
.path = true,
.producer = false,
.generated = false,
.dep_file = false,
.make_absolute = a.make_absolute,
},
.prefix = .{ .value = if (a.prefix.len != 0) try wc.addString(a.prefix) else null },
.suffix = .{ .value = if (a.suffix.len != 0) try wc.addString(a.suffix) else null },
.basename = .{ .value = null },
.path = .{ .value = try addLazyPath(s, a.lazy_path) },
.producer = .{ .value = null },
.generated = .{ .value = null },
},
.decorated_directory => |a| .{
.flags = .{
.tag = .path_directory,
.prefix = a.prefix.len != 0,
.suffix = a.suffix.len != 0,
.basename = false,
.path = true,
.producer = false,
.generated = false,
.dep_file = false,
.make_absolute = a.make_absolute,
},
.prefix = .{ .value = if (a.prefix.len != 0) try wc.addString(a.prefix) else null },
.suffix = .{ .value = if (a.suffix.len != 0) try wc.addString(a.suffix) else null },
.basename = .{ .value = null },
.path = .{ .value = try addLazyPath(s, a.lazy_path) },
.producer = .{ .value = null },
.generated = .{ .value = null },
},
.file_content => |a| .{
.flags = .{
.tag = .file_content,
.prefix = a.prefix.len != 0,
.suffix = a.suffix.len != 0,
.basename = false,
.path = true,
.producer = false,
.generated = false,
.dep_file = false,
.make_absolute = false,
},
.prefix = .{ .value = if (a.prefix.len != 0) try wc.addString(a.prefix) else null },
.suffix = .{ .value = if (a.suffix.len != 0) try wc.addString(a.suffix) else null },
.basename = .{ .value = null },
.path = .{ .value = try addLazyPath(s, a.lazy_path) },
.producer = .{ .value = null },
.generated = .{ .value = null },
},
.bytes => |a| .{
.flags = .{
.tag = .string,
.prefix = true,
.suffix = false,
.basename = false,
.path = false,
.producer = false,
.generated = false,
.dep_file = false,
.make_absolute = false,
},
.prefix = .{ .value = try wc.addString(a) },
.suffix = .{ .value = null },
.basename = .{ .value = null },
.path = .{ .value = null },
.producer = .{ .value = null },
.generated = .{ .value = null },
},
.output_file, .output_file_dep => |a, tag| .{
.flags = .{
.tag = .output_file,
.prefix = a.prefix.len != 0,
.suffix = a.suffix.len != 0,
.basename = a.basename.len != 0,
.path = false,
.producer = false,
.generated = true,
.dep_file = tag == .output_file_dep,
.make_absolute = a.make_absolute,
},
.prefix = .{ .value = if (a.prefix.len != 0) try wc.addString(a.prefix) else null },
.suffix = .{ .value = if (a.suffix.len != 0) try wc.addString(a.suffix) else null },
.basename = .{ .value = if (a.basename.len != 0) try wc.addString(a.basename) else null },
.path = .{ .value = null },
.producer = .{ .value = null },
.generated = .{ .value = a.generated_file },
},
.output_directory => |a| .{
.flags = .{
.tag = .output_directory,
.prefix = a.prefix.len != 0,
.suffix = a.suffix.len != 0,
.basename = a.basename.len != 0,
.path = false,
.producer = false,
.generated = true,
.dep_file = false,
.make_absolute = a.make_absolute,
},
.prefix = .{ .value = if (a.prefix.len != 0) try wc.addString(a.prefix) else null },
.suffix = .{ .value = if (a.suffix.len != 0) try wc.addString(a.suffix) else null },
.basename = .{ .value = if (a.basename.len != 0) try wc.addString(a.basename) else null },
.path = .{ .value = null },
.producer = .{ .value = null },
.generated = .{ .value = a.generated_file },
},
.passthru => .{
.flags = .{
.tag = .passthru,
.prefix = false,
.suffix = false,
.basename = false,
.path = false,
.producer = false,
.generated = false,
.dep_file = false,
.make_absolute = false,
},
.prefix = .{ .value = null },
.suffix = .{ .value = null },
.basename = .{ .value = null },
.path = .{ .value = null },
.producer = .{ .value = null },
.generated = .{ .value = null },
},
});
}
return result;
}