@@ -26,40 +26,58 @@ extension ArgumentConvertible {
2626
2727public class Argument < T : ArgumentConvertible > : ArgumentDescriptor {
2828 public typealias ValueType = T
29+ public typealias Validator = ValueType throws -> ValueType
2930
3031 public let name : String
3132 public let description : String ?
33+ public let validator : Validator ?
3234
3335 public var type : ArgumentType { return . Argument }
3436
35- public init ( _ name: String , description: String ? = nil ) {
37+ public init ( _ name: String , description: String ? = nil , validator : Validator ? = nil ) {
3638 self . name = name
3739 self . description = description
40+ self . validator = validator
3841 }
3942
4043 public func parse( parser: ArgumentParser ) throws -> ValueType {
41- return try T ( parser: parser)
44+ let value = try T ( parser: parser)
45+
46+ if let validator = validator {
47+ return try validator ( value)
48+ }
49+
50+ return value
4251 }
4352}
4453
4554
4655public class Option < T : ArgumentConvertible > : ArgumentDescriptor {
4756 public typealias ValueType = T
57+ public typealias Validator = ValueType throws -> ValueType
4858
4959 public let name : String
5060 public let description : String ?
5161 public let `default` : ValueType
5262 public var type : ArgumentType { return . Option }
63+ public let validator : Validator ?
5364
54- public init ( _ name: String , _ `default`: ValueType , description: String ? = nil ) {
65+ public init ( _ name: String , _ `default`: ValueType , description: String ? = nil , validator : Validator ? = nil ) {
5566 self . name = name
5667 self . description = description
5768 self . `default` = `default`
69+ self . validator = validator
5870 }
5971
6072 public func parse( parser: ArgumentParser ) throws -> ValueType {
6173 if let value = try parser. shiftValueForOption ( name) {
62- return try T ( string: value)
74+ let value = try T ( string: value)
75+
76+ if let validator = validator {
77+ return try validator ( value)
78+ }
79+
80+ return value
6381 }
6482
6583 return `default`
0 commit comments