@@ -100,7 +100,7 @@ type ParseResults<[<EqualityConditionalOn; ComparisonConditionalOn>]'Template wh
100
100
/// <summary>Returns the *last* specified parameter of given type.
101
101
/// Command line parameters have precedence over AppSettings parameters.</summary>
102
102
/// <param name="expr">The name of the parameter, expressed as quotation of DU constructor.</param>
103
- /// <param name="defaultValue">Return this of no parameter of specific kind has been specified.</param>
103
+ /// <param name="defaultValue">Return this if no parameter of specific kind has been specified.</param>
104
104
/// <param name="source">Optional source restriction: AppSettings or CommandLine.</param>
105
105
member s.GetResult ( [<ReflectedDefinition>] expr : Expr < 'Template >, ? defaultValue : 'Template , ? source : ParseSource ) : 'Template =
106
106
match defaultValue with
@@ -110,12 +110,25 @@ type ParseResults<[<EqualityConditionalOn; ComparisonConditionalOn>]'Template wh
110
110
/// <summary>Returns the *last* specified parameter of given type.
111
111
/// Command line parameters have precedence over AppSettings parameters.</summary>
112
112
/// <param name="expr">The name of the parameter, expressed as quotation of DU constructor.</param>
113
- /// <param name="defaultValue">Return this of no parameter of specific kind has been specified.</param>
113
+ /// <param name="defaultValue">Return this if no parameter of specific kind has been specified.</param>
114
114
/// <param name="source">Optional source restriction: AppSettings or CommandLine.</param>
115
- member s.GetResult ( [<ReflectedDefinition>] expr : Expr < 'Fields -> 'Template >, ? defaultValue : 'Fields , ? source : ParseSource ) : 'Fields =
115
+ member s.GetResult ( [<ReflectedDefinition>] expr : Expr < 'Fields -> 'Template >, ? defaultValue : 'Fields , ? source : ParseSource ) : 'Fields =
116
116
match defaultValue with
117
117
| None -> let r = getResult source expr in r.FieldContents :?> 'Fields
118
- | Some def -> defaultArg ( s.TryGetResult expr) def
118
+ | Some def -> defaultArg ( s.TryGetResult( expr, ?source = source)) def
119
+
120
+ /// <summary>Returns the *last* specified parameter of given type.
121
+ /// Command line parameters have precedence over AppSettings parameters.</summary>
122
+ /// <param name="expr">The name of the parameter, expressed as quotation of DU constructor.</param>
123
+ /// <param name="defThunk">Function used to default if no parameter has been specified.
124
+ /// Any resulting Exception will be trapped, and the Exception's <c>.Message</c> will be used as the Failure Message as per <c>Raise</c> and <c>Catch</c>.</param>
125
+ /// <param name="source">Optional source restriction: AppSettings or CommandLine.</param>
126
+ /// <param name="errorCode">The error code to be returned.</param>
127
+ /// <param name="showUsage">Print usage together with error message.</param>
128
+ member s.GetResult ( [<ReflectedDefinition>] expr : Expr < 'Fields -> 'Template >, defThunk : unit -> 'Fields , ? source : ParseSource , ? errorCode , ? showUsage ) : 'Fields =
129
+ match s.TryGetResult( expr, ?source = source) with
130
+ | Some x -> x
131
+ | None -> s.Catch( defThunk, ?errorCode = errorCode, ?showUsage = showUsage)
119
132
120
133
/// <summary>Checks if parameter of specific kind has been specified.</summary>
121
134
/// <param name="expr">The name of the parameter, expressed as quotation of DU constructor.</param>
@@ -130,7 +143,7 @@ type ParseResults<[<EqualityConditionalOn; ComparisonConditionalOn>]'Template wh
130
143
/// <param name="msg">The error message to be displayed.</param>
131
144
/// <param name="errorCode">The error code to be returned.</param>
132
145
/// <param name="showUsage">Print usage together with error message.</param>
133
- member _.Raise ( msg : string , ? errorCode : ErrorCode , ? showUsage : bool ) : 'T =
146
+ member _.Raise < 'T > (msg : string , ? errorCode : ErrorCode , ? showUsage : bool ) : 'T =
134
147
let errorCode = defaultArg errorCode ErrorCode.PostProcess
135
148
let showUsage = defaultArg showUsage true
136
149
error ( not showUsage) errorCode msg
@@ -139,15 +152,15 @@ type ParseResults<[<EqualityConditionalOn; ComparisonConditionalOn>]'Template wh
139
152
/// <param name="error">The error to be displayed.</param>
140
153
/// <param name="errorCode">The error code to be returned.</param>
141
154
/// <param name="showUsage">Print usage together with error message.</param>
142
- member r.Raise ( error : exn , ? errorCode : ErrorCode , ? showUsage : bool ) : 'T =
143
- r.Raise ( error.Message, ?errorCode = errorCode, ?showUsage = showUsage)
155
+ member r.Raise < 'T > (error : exn , ? errorCode : ErrorCode , ? showUsage : bool ) : 'T =
156
+ r.Raise( error.Message, ?errorCode = errorCode, ?showUsage = showUsage)
144
157
145
- /// <summary>Handles any raised exception through the argument parser's exiter mechanism. Display usage optionally. </summary>
158
+ /// <summary>Handles any raised exception through the argument parser's exiter mechanism.</summary>
146
159
/// <param name="f">The operation to be executed.</param>
147
160
/// <param name="errorCode">The error code to be returned.</param>
148
- /// <param name="showUsage">Print usage together with error message.</param>
149
- member r.Catch ( f : unit -> 'T , ? errorCode : ErrorCode , ? showUsage : bool ) : 'T =
150
- try f () with e -> r.Raise( e.Message , ?errorCode = errorCode, ?showUsage = showUsage)
161
+ /// <param name="showUsage">Print usage together with error message. Defaults to <c>true</c> </param>
162
+ member r.Catch < 'T > (f : unit -> 'T , ? errorCode : ErrorCode , ? showUsage : bool ) : 'T =
163
+ try f () with e -> r.Raise( e, ?errorCode = errorCode, ?showUsage = showUsage)
151
164
152
165
/// <summary>Returns the *last* specified parameter of given type.
153
166
/// Command line parameters have precedence over AppSettings parameters.
@@ -252,4 +265,4 @@ type ParseResults<[<EqualityConditionalOn; ComparisonConditionalOn>]'Template wh
252
265
Unchecked.compare
253
266
r.CachedAllResults.Value
254
267
other.CachedAllResults.Value
255
- | _ -> invalidArg " other" " cannot compare values of different types"
268
+ | _ -> invalidArg " other" " cannot compare values of different types"
0 commit comments