lib/tracy/src/cli/args/summary.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const scalar = @import("scalar.zig");
 3 const types = @import("types.zig");
 4 
 5 pub fn parse(args: []const []const u8) !types.SummaryArgs {
 6     if (args.len == 0) return error.InvalidArguments;
 7     var parsed = types.SummaryArgs{ .path = args[0] };
 8     var index: usize = 1;
 9     while (index < args.len) : (index += 1) {
10         if (std.mem.eql(u8, args[index], "--format")) {
11             index += 1;
12             if (index >= args.len) return error.InvalidArguments;
13             if (std.mem.eql(u8, args[index], "text")) {
14                 parsed.format = .text;
15             } else if (std.mem.eql(u8, args[index], "jsonl")) {
16                 parsed.format = .jsonl;
17             } else {
18                 return error.UnsupportedFormat;
19             }
20         } else if (std.mem.eql(u8, args[index], "--top")) {
21             index += 1;
22             if (index >= args.len) return error.InvalidArguments;
23             parsed.options.top = try scalar.parsePositiveUsize(args[index]);
24         } else {
25             return error.UnknownArgument;
26         }
27     }
28     return parsed;
29 }
30 
31 test "summary args parse format and limit" {
32     const parsed = try parse(&.{ "events.jsonl", "--format", "jsonl", "--top", "8" });
33     try std.testing.expectEqualStrings("events.jsonl", parsed.path);
34     try std.testing.expectEqual(types.Format.jsonl, parsed.format);
35     try std.testing.expectEqual(@as(usize, 8), parsed.options.top);
36 }