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 }