@@ -19,11 +19,6 @@ type ActionContext =
1919 ParseResult: ParseResult
2020 CancellationToken: System .Threading .CancellationToken
2121 }
22- static member Create ( parseResult : ParseResult ) =
23- {
24- ParseResult = parseResult
25- CancellationToken = System.Threading.CancellationToken.None
26- }
2722
2823type ActionInputSource =
2924 | ParsedOption of Option
@@ -57,43 +52,43 @@ module Input =
5752 let option < 'T > ( name : string ) =
5853 Option< 'T>( name) |> ActionInput.OfOption
5954
60- let editOption ( edit : Option < 'T > -> unit ) ( hi : ActionInput < 'T >) =
61- match hi .Source with
55+ let editOption ( edit : Option < 'T > -> unit ) ( input : ActionInput < 'T >) =
56+ match input .Source with
6257 | ParsedOption o -> o :?> Option< 'T> |> edit
6358 | _ -> ()
64- hi
59+ input
6560
66- let editArgument ( edit : Argument < 'T > -> unit ) ( hi : ActionInput < 'T >) =
67- match hi .Source with
61+ let editArgument ( edit : Argument < 'T > -> unit ) ( input : ActionInput < 'T >) =
62+ match input .Source with
6863 | ParsedArgument a -> a :?> Argument< 'T> |> edit
6964 | _ -> ()
70- hi
65+ input
7166
72- let aliases ( aliases : string seq ) ( hi : ActionInput < 'T >) =
73- hi |> editOption ( fun o -> aliases |> Seq.iter o.Aliases.Add)
67+ let aliases ( aliases : string seq ) ( input : ActionInput < 'T >) =
68+ input |> editOption ( fun o -> aliases |> Seq.iter o.Aliases.Add)
7469
75- let alias ( alias : string ) ( hi : ActionInput < 'T >) =
76- hi |> editOption ( fun o -> o.Aliases.Add alias)
70+ let alias ( alias : string ) ( input : ActionInput < 'T >) =
71+ input |> editOption ( fun o -> o.Aliases.Add alias)
7772
78- let desc ( description : string ) ( hi : ActionInput < 'T >) =
79- hi
73+ let desc ( description : string ) ( input : ActionInput < 'T >) =
74+ input
8075 |> editOption ( fun o -> o.Description <- description)
8176 |> editArgument ( fun a -> a.Description <- description)
8277
83- let defaultValue ( defaultValue : 'T ) ( hi : ActionInput < 'T >) =
84- hi
78+ let defaultValue ( defaultValue : 'T ) ( input : ActionInput < 'T >) =
79+ input
8580 |> editOption ( fun o -> o.DefaultValueFactory <- ( fun _ -> defaultValue))
8681 |> editArgument ( fun a -> a.DefaultValueFactory <- ( fun _ -> defaultValue))
8782
8883 let def = defaultValue
8984
90- let defFactory ( defaultValueFactory : Parsing.ArgumentResult -> 'T ) ( hi : ActionInput < 'T >) =
91- hi
85+ let defFactory ( defaultValueFactory : Parsing.ArgumentResult -> 'T ) ( input : ActionInput < 'T >) =
86+ input
9287 |> editOption ( fun o -> o.DefaultValueFactory <- defaultValueFactory)
9388 |> editArgument ( fun a -> a.DefaultValueFactory <- defaultValueFactory)
9489
95- let required ( hi : ActionInput < 'T >) =
96- hi |> editOption ( fun o -> o.Required <- true )
90+ let required ( input : ActionInput < 'T >) =
91+ input |> editOption ( fun o -> o.Required <- true )
9792
9893 let optionMaybe < 'T > ( name : string ) =
9994 let o = Option< 'T option>( name, aliases = [||])
@@ -124,6 +119,31 @@ module Input =
124119 )
125120 ActionInput.OfArgument< 'T option> a
126121
122+ let validate ( validate : 'T -> Result < unit , string >) ( input : ActionInput < 'T >) =
123+ input
124+ |> editOption ( fun o ->
125+ o.Validators.Add( fun res ->
126+ let value = res.GetValue< 'T>( o.Name)
127+ match validate value with
128+ | Ok () -> ()
129+ | Error err -> res.AddError( err)
130+ )
131+ )
132+ |> editArgument ( fun a ->
133+ a.Validators.Add( fun res ->
134+ let value = res.GetValue< 'T>( a.Name)
135+ match validate value with
136+ | Ok () -> ()
137+ | Error err -> res.AddError( err)
138+ )
139+ )
140+
141+ let addValidator ( validator : Parsing.SymbolResult -> unit ) ( input : ActionInput < 'T >) =
142+ input
143+ |> editOption ( fun o -> o.Validators.Add( validator))
144+ |> editArgument ( fun a -> a.Validators.Add( validator))
145+
146+
127147 let ofOption ( o : Option < 'T >) =
128148 ActionInput.OfOption< 'T> o
129149
0 commit comments