Skip to content

Commit f4a89b8

Browse files
committed
Better support for optional parameters
1 parent b0c8d3e commit f4a89b8

File tree

5 files changed

+43
-5
lines changed

5 files changed

+43
-5
lines changed

docs/docs.fsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#load "../packages/build/FSharp.Formatting/FSharp.Formatting.fsx"
66
#I "../packages/build/FAKE/tools/"
77
#I "../packages/build/Suave/lib/net40"
8-
#I "../packages/build/DotLiquid/lib/NET451"
8+
#I "../packages/build/DotLiquid/lib/net45"
99
#r "FakeLib.dll"
1010
#r "Suave.dll"
1111
#r "DotLiquid.dll"

src/SwaggerProvider.DesignTime/DefinitionCompiler.fs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,19 @@ type DefinitionCompiler (schema:SwaggerObject) =
166166
/// Compiles the definition.
167167
member __.CompileTy opName tyUseSuffix ty required =
168168
compileSchemaObject (uniqueName opName tyUseSuffix) ty required
169+
170+
/// Default value for parameters
171+
member __.GetDefaultValue schemaObj =
172+
match schemaObj with
173+
| Boolean
174+
| Byte | Int32 | Int64
175+
| Float| Double
176+
| Date | DateTime
177+
-> box <| None
178+
| String | Enum _
179+
-> box <| Unchecked.defaultof<string>
180+
| File | Array _
181+
| Dictionary _ | Object _
182+
| Reference _
183+
-> null
184+

src/SwaggerProvider.DesignTime/OperationCompiler.fs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,17 @@ type OperationCompiler (schema:SwaggerObject, defCompiler:DefinitionCompiler) =
2020
then failwithf "Operation name could not be empty. See '%s/%A'" op.Path op.Type
2121

2222
let parameters =
23-
[let required, optional = op.Parameters |> Array.partition (fun x->x.Required)
24-
for x in Array.append required optional ->
23+
[
24+
let required, optional = op.Parameters |> Array.partition (fun x->x.Required)
25+
let parameters = Array.append required optional
26+
for x in parameters ->
2527
let paramName = niceCamelName x.Name
26-
ProvidedParameter(paramName, defCompiler.CompileTy methodName paramName x.Type x.Required)]
28+
let paramType = defCompiler.CompileTy methodName paramName x.Type x.Required
29+
if x.Required then ProvidedParameter(paramName, paramType)
30+
else
31+
let paramDefaultValue = defCompiler.GetDefaultValue x.Type
32+
ProvidedParameter(paramName, paramType, false, paramDefaultValue)
33+
]
2734
let retTy =
2835
let okResponse = // BUG : wrong selector
2936
op.Responses |> Array.tryFind (fun (code, resp) ->

tests/SwaggerProvider.ProviderTests/Swashbuckle.UpdateControllers.Tests.fs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,11 @@ let returnControllersTests =
140140
let bytes = [|42uy;24uy|]
141141
let y = api.GetApiUpdateObjectFileDescriptionClass(bytes)
142142
y.Bytes |> shouldEqual bytes
143+
144+
testCase "Use Optional param Int" <| fun _ ->
145+
api.GetApiUpdateWithOptionalInt(1)
146+
|> shouldEqual 2
147+
148+
api.GetApiUpdateWithOptionalInt(1, Some(2))
149+
|> shouldEqual 3
143150
]

tests/Swashbuckle.OWIN.Server/UpdateControllers.fs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
open System
44
open System.Web.Http
5+
open System.Runtime.InteropServices
56

67
type UpdateController<'T>(f:'T->'T) =
78
inherit ApiController()
@@ -54,4 +55,11 @@ type UpdateObjectFileDescriptionClassController () =
5455
inherit ApiController()
5556

5657
member this.Get ([<FromUri>]x) = Types.FileDescription("1.txt", x)
57-
member this.Post (x:Types.FileDescription) = x
58+
member this.Post (x:Types.FileDescription) = x
59+
60+
61+
type UpdateWithOptionalIntController() =
62+
inherit ApiController()
63+
64+
member this.Get ([<FromUri>]x, [<FromUri; Optional; DefaultParameterValue(1)>]y:int) =
65+
x+y

0 commit comments

Comments
 (0)