summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jimmi Holst Christensen2018-11-13 13:33:51 +0100
committerGravatar Jimmi Holst Christensen2018-11-13 13:33:51 +0100
commit9e2ac9c6ab567ab3d95db9527147ef80aa4dd7c1 (patch)
treeaaba4173edfbc925068393c1d417da2b618bea53
parentRun tests in all release modes (diff)
downloadzig-clap-9e2ac9c6ab567ab3d95db9527147ef80aa4dd7c1.tar.gz
zig-clap-9e2ac9c6ab567ab3d95db9527147ef80aa4dd7c1.tar.xz
zig-clap-9e2ac9c6ab567ab3d95db9527147ef80aa4dd7c1.zip
Zig fmt
-rw-r--r--clap.zig25
-rw-r--r--test.zig54
2 files changed, 27 insertions, 52 deletions
diff --git a/clap.zig b/clap.zig
index 26b97aa..a2d30a5 100644
--- a/clap.zig
+++ b/clap.zig
@@ -210,7 +210,7 @@ pub const OsArgIterator = struct {
210/// ::StreamingClap.next to parse all the arguments of your program. 210/// ::StreamingClap.next to parse all the arguments of your program.
211pub fn StreamingClap(comptime Id: type, comptime ArgError: type) type { 211pub fn StreamingClap(comptime Id: type, comptime ArgError: type) type {
212 return struct { 212 return struct {
213 const Self = @This(); 213 const Self = @This();
214 214
215 const State = union(enum) { 215 const State = union(enum) {
216 Normal, 216 Normal,
@@ -374,26 +374,3 @@ pub fn StreamingClap(comptime Id: type, comptime ArgError: type) type {
374 } 374 }
375 }; 375 };
376} 376}
377
378pub fn ToStructId(comptime T: type) type {
379 return struct {
380 parse: fn(*T, ?[]const u8)
381 };
382}
383
384const ToStructParamError = error{};
385const ToStructParam = Param(fn (*T, ?[]const u8) ToStructParamError!void);
386
387fn paramsFromStruct(comptime T: type) []const ToStructParam {
388 var res: []const ToStructParam = []ToStructParam{};
389
390 for (@typeInfo(T).Struct.fields) |field| {
391 res = res ++ []ToStructParam{
392 ToStructParam.init()
393 };
394 }
395}
396
397pub fn toStruct(defaults: var, iter: *ArgIterator(ArgError)) !@typeOf(defaults) {
398
399}
diff --git a/test.zig b/test.zig
index 70bbab1..27c93c2 100644
--- a/test.zig
+++ b/test.zig
@@ -11,7 +11,7 @@ const Names = clap.Names;
11const Param = clap.Param(u8); 11const Param = clap.Param(u8);
12const StreamingClap = clap.StreamingClap(u8, ArgSliceIterator.Error); 12const StreamingClap = clap.StreamingClap(u8, ArgSliceIterator.Error);
13const Arg = clap.Arg(u8); 13const Arg = clap.Arg(u8);
14 14
15fn testNoErr(params: []const Param, args: []const []const u8, results: []const Arg) void { 15fn testNoErr(params: []const Param, args: []const []const u8, results: []const Arg) void {
16 var arg_iter = ArgSliceIterator.init(args); 16 var arg_iter = ArgSliceIterator.init(args);
17 var c = StreamingClap.init(params, &arg_iter.iter); 17 var c = StreamingClap.init(params, &arg_iter.iter);
@@ -26,7 +26,7 @@ fn testNoErr(params: []const Param, args: []const []const u8, results: []const A
26 const actual_value = arg.value orelse unreachable; 26 const actual_value = arg.value orelse unreachable;
27 debug.assert(mem.eql(u8, expected_value, actual_value)); 27 debug.assert(mem.eql(u8, expected_value, actual_value));
28 } 28 }
29 29
30 if (c.next() catch unreachable) |_| { 30 if (c.next() catch unreachable) |_| {
31 unreachable; 31 unreachable;
32 } 32 }
@@ -38,17 +38,17 @@ test "clap: short" {
38 Param.init(1, false, Names.short('b')), 38 Param.init(1, false, Names.short('b')),
39 Param.init(2, true, Names.short('c')), 39 Param.init(2, true, Names.short('c')),
40 }; 40 };
41 41
42 const a = &params[0]; 42 const a = &params[0];
43 const b = &params[1]; 43 const b = &params[1];
44 const c = &params[2]; 44 const c = &params[2];
45 45
46 testNoErr( 46 testNoErr(
47 params, 47 params,
48 [][]const u8{ 48 [][]const u8{
49 "-a", "-b", "-ab", "-ba", 49 "-a", "-b", "-ab", "-ba",
50 "-c", "0", "-c=0", 50 "-c", "0", "-c=0", "-ac",
51 "-ac", "0", "-ac=0", 51 "0", "-ac=0",
52 }, 52 },
53 []const Arg{ 53 []const Arg{
54 Arg.init(a, null), 54 Arg.init(a, null),
@@ -73,16 +73,17 @@ test "clap: long" {
73 Param.init(1, false, Names.long("bb")), 73 Param.init(1, false, Names.long("bb")),
74 Param.init(2, true, Names.long("cc")), 74 Param.init(2, true, Names.long("cc")),
75 }; 75 };
76 76
77 const aa = &params[0]; 77 const aa = &params[0];
78 const bb = &params[1]; 78 const bb = &params[1];
79 const cc = &params[2]; 79 const cc = &params[2];
80 80
81 testNoErr( 81 testNoErr(
82 params, 82 params,
83 [][]const u8{ 83 [][]const u8{
84 "--aa", "--bb", 84 "--aa", "--bb",
85 "--cc", "0", "--cc=0", 85 "--cc", "0",
86 "--cc=0",
86 }, 87 },
87 []const Arg{ 88 []const Arg{
88 Arg.init(aa, null), 89 Arg.init(aa, null),
@@ -99,16 +100,17 @@ test "clap: bare" {
99 Param.init(1, false, Names.bare("bb")), 100 Param.init(1, false, Names.bare("bb")),
100 Param.init(2, true, Names.bare("cc")), 101 Param.init(2, true, Names.bare("cc")),
101 }; 102 };
102 103
103 const aa = &params[0]; 104 const aa = &params[0];
104 const bb = &params[1]; 105 const bb = &params[1];
105 const cc = &params[2]; 106 const cc = &params[2];
106 107
107 testNoErr( 108 testNoErr(
108 params, 109 params,
109 [][]const u8{ 110 [][]const u8{
110 "aa", "bb", 111 "aa", "bb",
111 "cc", "0", "cc=0", 112 "cc", "0",
113 "cc=0",
112 }, 114 },
113 []const Arg{ 115 []const Arg{
114 Arg.init(aa, null), 116 Arg.init(aa, null),
@@ -120,13 +122,11 @@ test "clap: bare" {
120} 122}
121 123
122test "clap: none" { 124test "clap: none" {
123 const params = []Param{ 125 const params = []Param{Param.init(0, true, Names.none())};
124 Param.init(0, true, Names.none()), 126
125 };
126
127 testNoErr( 127 testNoErr(
128 params, 128 params,
129 [][]const u8{"aa", "bb"}, 129 [][]const u8{ "aa", "bb" },
130 []const Arg{ 130 []const Arg{
131 Arg.init(&params[0], "aa"), 131 Arg.init(&params[0], "aa"),
132 Arg.init(&params[0], "bb"), 132 Arg.init(&params[0], "bb"),
@@ -153,22 +153,20 @@ test "clap: all" {
153 }), 153 }),
154 Param.init(3, true, Names.none()), 154 Param.init(3, true, Names.none()),
155 }; 155 };
156 156
157 const aa = &params[0]; 157 const aa = &params[0];
158 const bb = &params[1]; 158 const bb = &params[1];
159 const cc = &params[2]; 159 const cc = &params[2];
160 const bare = &params[3]; 160 const bare = &params[3];
161 161
162 testNoErr( 162 testNoErr(
163 params, 163 params,
164 [][]const u8{ 164 [][]const u8{
165 "-a", "-b", "-ab", "-ba", 165 "-a", "-b", "-ab", "-ba",
166 "-c", "0", "-c=0", 166 "-c", "0", "-c=0", "-ac",
167 "-ac", "0", "-ac=0", 167 "0", "-ac=0", "--aa", "--bb",
168 "--aa", "--bb", 168 "--cc", "0", "--cc=0", "aa",
169 "--cc", "0", "--cc=0", 169 "bb", "cc", "0", "cc=0",
170 "aa", "bb",
171 "cc", "0", "cc=0",
172 "something", 170 "something",
173 }, 171 },
174 []const Arg{ 172 []const Arg{
@@ -217,9 +215,9 @@ test "clap.Example" {
217 const params = []c.Param(u8){ 215 const params = []c.Param(u8){
218 c.Param(u8).init('h', false, c.Names.prefix("help")), 216 c.Param(u8).init('h', false, c.Names.prefix("help")),
219 c.Param(u8).init('v', false, c.Names.prefix("version")), 217 c.Param(u8).init('v', false, c.Names.prefix("version")),
220 c.Param(u8).init('f', true, c.Names.none()), 218 c.Param(u8).init('f', true, c.Names.none()),
221 }; 219 };
222 220
223 // Here, we use an `ArgSliceIterator` which iterates over 221 // Here, we use an `ArgSliceIterator` which iterates over
224 // a slice of arguments. For real program, you would probably 222 // a slice of arguments. For real program, you would probably
225 // use `OsArgIterator`. 223 // use `OsArgIterator`.
@@ -244,4 +242,4 @@ test "clap.Example" {
244 else => unreachable, 242 else => unreachable,
245 } 243 }
246 } 244 }
247} \ No newline at end of file 245}