diff options
| author | 2020-08-23 13:48:12 +1000 | |
|---|---|---|
| committer | 2020-08-28 09:43:42 +0200 | |
| commit | 08bab91e1e8ced3f06c128a57bd991b9a1b901fc (patch) | |
| tree | 0a86df5776f0840b3262697af3c8ed7b1974fb71 /clap/streaming.zig | |
| parent | parse multiple options (diff) | |
| download | zig-clap-08bab91e1e8ced3f06c128a57bd991b9a1b901fc.tar.gz zig-clap-08bab91e1e8ced3f06c128a57bd991b9a1b901fc.tar.xz zig-clap-08bab91e1e8ced3f06c128a57bd991b9a1b901fc.zip | |
parse and validate multiple option
Diffstat (limited to 'clap/streaming.zig')
| -rw-r--r-- | clap/streaming.zig | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/clap/streaming.zig b/clap/streaming.zig index 95ee581..b843bff 100644 --- a/clap/streaming.zig +++ b/clap/streaming.zig | |||
| @@ -75,7 +75,7 @@ pub fn StreamingClap(comptime Id: type, comptime ArgIterator: type) type { | |||
| 75 | 75 | ||
| 76 | if (!mem.eql(u8, name, match)) | 76 | if (!mem.eql(u8, name, match)) |
| 77 | continue; | 77 | continue; |
| 78 | if (!param.takes_value) { | 78 | if (param.takes_value == .None) { |
| 79 | if (maybe_value != null) | 79 | if (maybe_value != null) |
| 80 | return error.DoesntTakeValue; | 80 | return error.DoesntTakeValue; |
| 81 | 81 | ||
| @@ -128,7 +128,7 @@ pub fn StreamingClap(comptime Id: type, comptime ArgIterator: type) type { | |||
| 128 | 128 | ||
| 129 | // Before we return, we have to set the new state of the clap | 129 | // Before we return, we have to set the new state of the clap |
| 130 | defer { | 130 | defer { |
| 131 | if (arg.len <= next_index or param.takes_value) { | 131 | if (arg.len <= next_index or param.takes_value != .None) { |
| 132 | parser.state = State.Normal; | 132 | parser.state = State.Normal; |
| 133 | } else { | 133 | } else { |
| 134 | parser.state = State{ | 134 | parser.state = State{ |
| @@ -140,7 +140,7 @@ pub fn StreamingClap(comptime Id: type, comptime ArgIterator: type) type { | |||
| 140 | } | 140 | } |
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | if (!param.takes_value) | 143 | if (param.takes_value == .None) |
| 144 | return Arg(Id){ .param = param }; | 144 | return Arg(Id){ .param = param }; |
| 145 | 145 | ||
| 146 | if (arg.len <= next_index) { | 146 | if (arg.len <= next_index) { |
| @@ -194,20 +194,26 @@ test "clap.streaming.StreamingClap: short params" { | |||
| 194 | clap.Param(u8){ | 194 | clap.Param(u8){ |
| 195 | .id = 2, | 195 | .id = 2, |
| 196 | .names = clap.Names{ .short = 'c' }, | 196 | .names = clap.Names{ .short = 'c' }, |
| 197 | .takes_value = true, | 197 | .takes_value = .One, |
| 198 | }, | ||
| 199 | clap.Param(u8){ | ||
| 200 | .id = 3, | ||
| 201 | .names = clap.Names{ .short = 'd' }, | ||
| 202 | .takes_value = .Many, | ||
| 198 | }, | 203 | }, |
| 199 | }; | 204 | }; |
| 200 | 205 | ||
| 201 | const a = ¶ms[0]; | 206 | const a = ¶ms[0]; |
| 202 | const b = ¶ms[1]; | 207 | const b = ¶ms[1]; |
| 203 | const c = ¶ms[2]; | 208 | const c = ¶ms[2]; |
| 209 | const d = ¶ms[3]; | ||
| 204 | 210 | ||
| 205 | testNoErr( | 211 | testNoErr( |
| 206 | ¶ms, | 212 | ¶ms, |
| 207 | &[_][]const u8{ | 213 | &[_][]const u8{ |
| 208 | "-a", "-b", "-ab", "-ba", | 214 | "-a", "-b", "-ab", "-ba", |
| 209 | "-c", "0", "-c=0", "-ac", | 215 | "-c", "0", "-c=0", "-ac", |
| 210 | "0", "-ac=0", | 216 | "0", "-ac=0", "-d=0", |
| 211 | }, | 217 | }, |
| 212 | &[_]Arg(u8){ | 218 | &[_]Arg(u8){ |
| 213 | Arg(u8){ .param = a }, | 219 | Arg(u8){ .param = a }, |
| @@ -222,6 +228,7 @@ test "clap.streaming.StreamingClap: short params" { | |||
| 222 | Arg(u8){ .param = c, .value = "0" }, | 228 | Arg(u8){ .param = c, .value = "0" }, |
| 223 | Arg(u8){ .param = a }, | 229 | Arg(u8){ .param = a }, |
| 224 | Arg(u8){ .param = c, .value = "0" }, | 230 | Arg(u8){ .param = c, .value = "0" }, |
| 231 | Arg(u8){ .param = d, .value = "0" }, | ||
| 225 | }, | 232 | }, |
| 226 | ); | 233 | ); |
| 227 | } | 234 | } |
| @@ -239,26 +246,33 @@ test "clap.streaming.StreamingClap: long params" { | |||
| 239 | clap.Param(u8){ | 246 | clap.Param(u8){ |
| 240 | .id = 2, | 247 | .id = 2, |
| 241 | .names = clap.Names{ .long = "cc" }, | 248 | .names = clap.Names{ .long = "cc" }, |
| 242 | .takes_value = true, | 249 | .takes_value = .One, |
| 250 | }, | ||
| 251 | clap.Param(u8){ | ||
| 252 | .id = 3, | ||
| 253 | .names = clap.Names{ .long = "dd" }, | ||
| 254 | .takes_value = .Many, | ||
| 243 | }, | 255 | }, |
| 244 | }; | 256 | }; |
| 245 | 257 | ||
| 246 | const aa = ¶ms[0]; | 258 | const aa = ¶ms[0]; |
| 247 | const bb = ¶ms[1]; | 259 | const bb = ¶ms[1]; |
| 248 | const cc = ¶ms[2]; | 260 | const cc = ¶ms[2]; |
| 261 | const dd = ¶ms[3]; | ||
| 249 | 262 | ||
| 250 | testNoErr( | 263 | testNoErr( |
| 251 | ¶ms, | 264 | ¶ms, |
| 252 | &[_][]const u8{ | 265 | &[_][]const u8{ |
| 253 | "--aa", "--bb", | 266 | "--aa", "--bb", |
| 254 | "--cc", "0", | 267 | "--cc", "0", |
| 255 | "--cc=0", | 268 | "--cc=0", "--dd=0", |
| 256 | }, | 269 | }, |
| 257 | &[_]Arg(u8){ | 270 | &[_]Arg(u8){ |
| 258 | Arg(u8){ .param = aa }, | 271 | Arg(u8){ .param = aa }, |
| 259 | Arg(u8){ .param = bb }, | 272 | Arg(u8){ .param = bb }, |
| 260 | Arg(u8){ .param = cc, .value = "0" }, | 273 | Arg(u8){ .param = cc, .value = "0" }, |
| 261 | Arg(u8){ .param = cc, .value = "0" }, | 274 | Arg(u8){ .param = cc, .value = "0" }, |
| 275 | Arg(u8){ .param = dd, .value = "0" }, | ||
| 262 | }, | 276 | }, |
| 263 | ); | 277 | ); |
| 264 | } | 278 | } |
| @@ -266,7 +280,7 @@ test "clap.streaming.StreamingClap: long params" { | |||
| 266 | test "clap.streaming.StreamingClap: positional params" { | 280 | test "clap.streaming.StreamingClap: positional params" { |
| 267 | const params = [_]clap.Param(u8){clap.Param(u8){ | 281 | const params = [_]clap.Param(u8){clap.Param(u8){ |
| 268 | .id = 0, | 282 | .id = 0, |
| 269 | .takes_value = true, | 283 | .takes_value = .One, |
| 270 | }}; | 284 | }}; |
| 271 | 285 | ||
| 272 | testNoErr( | 286 | testNoErr( |
| @@ -301,11 +315,11 @@ test "clap.streaming.StreamingClap: all params" { | |||
| 301 | .short = 'c', | 315 | .short = 'c', |
| 302 | .long = "cc", | 316 | .long = "cc", |
| 303 | }, | 317 | }, |
| 304 | .takes_value = true, | 318 | .takes_value = .One, |
| 305 | }, | 319 | }, |
| 306 | clap.Param(u8){ | 320 | clap.Param(u8){ |
| 307 | .id = 3, | 321 | .id = 3, |
| 308 | .takes_value = true, | 322 | .takes_value = .One, |
| 309 | }, | 323 | }, |
| 310 | }; | 324 | }; |
| 311 | 325 | ||