Skip to content

Commit 2efac8d

Browse files
djbekylef
authored andcommitted
feat: Variadic argument validation (#40)
* Add (optional) validator to VariadicArgument type * changelog entry * validator accepts array instead of single item
1 parent 62adaeb commit 2efac8d

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Enhancements
66

77
- Renamed VaradicArgument to VariadicArgument.
8+
- VariadicArgument now supports an optional validator.
89
- Adds support for variadic options, allowing the user to repeat options to
910
provide additional values.
1011

Sources/ArgumentDescription.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,28 @@ extension ArgumentConvertible {
2929

3030
open class VariadicArgument<T : ArgumentConvertible> : ArgumentDescriptor {
3131
public typealias ValueType = [T]
32+
public typealias Validator = (ValueType) throws -> ValueType
3233

3334
open let name: String
3435
open let description: String?
36+
open let validator: Validator?
3537

3638
open var type: ArgumentType { return .argument }
3739

38-
public init(_ name: String, description: String? = nil) {
40+
public init(_ name: String, description: String? = nil, validator: Validator? = nil) {
3941
self.name = name
4042
self.description = description
43+
self.validator = validator
4144
}
4245

4346
open func parse(_ parser: ArgumentParser) throws -> ValueType {
44-
return try Array<T>(parser: parser)
47+
let value = try Array<T>(parser: parser)
48+
49+
if let validator = validator {
50+
return try validator(value)
51+
}
52+
53+
return value
4554
}
4655
}
4756

0 commit comments

Comments
 (0)