Skip to content

Instantly share code, notes, and snippets.

@Szer
Created December 1, 2018 15:37
Show Gist options
  • Save Szer/1cffb7ea5397979c898e28b8ca88e08f to your computer and use it in GitHub Desktop.
Save Szer/1cffb7ea5397979c898e28b8ca88e08f to your computer and use it in GitHub Desktop.
type optionBuilder() =
member __.Bind(opt, f) = Option.bind f opt
member __.Bind(obj, f) = Option.bind f (Option.ofObj obj)
member __.Bind(obj, f) = Option.bind f (Option.ofObj (box obj))
member __.Bind(obj, f) = Option.bind f (Option.ofNullable obj)
member __.Return x = Some x
member __.ReturnFrom x = x
let option = optionBuilder()
type SwaggerDefaultValues () =
interface IOperationFilter with
member this.Apply(operation: Operation, context: OperationFilterContext) =
option {
let! op = operation
let! parameters = operation.Parameters
return parameters.OfType<NonBodyParameter>()
}
|> Option.defaultValue Seq.empty
|> Seq.map (fun parameter -> option {
let! paramDescription =
context.ApiDescription.ParameterDescriptions
|> Seq.tryFind (fun x -> x.Name = parameter.Name)
let! modelMetadata = description.ModelMetadata
let! description = modelMetadata.Description
if isNull parameter.Description then parameter.Description <- description
let! routeInfo = description.RouteInfo
if isNull parameter.Default then parameter.Default <- routeInfo.DefaultValue
parameter.Required <- (parameter.Required || (not routeInfo.IsOptional))
})
|> Seq.iter Option.iter
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment