Skip to content
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
"rollForward": false
},
"dotnet-serve": {
"version": "1.10.175",
"version": "1.10.190",
"commands": [
"dotnet-serve"
],
"rollForward": false
},
"fantomas": {
"version": "7.0.0",
"version": "7.0.3",
"commands": [
"fantomas"
],
Expand Down
10 changes: 4 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
# SwaggerProvider [![NuGet Badge](https://buildstats.info/nuget/SwaggerProvider)](https://www.nuget.org/packages/SwaggerProvider)
# SwaggerProvider

This SwaggerProvider can be used to access RESTful API generated using [Swagger.io](http://swagger.io)
![NuGet Version](https://badgen.net/nuget/v/SwaggerProvider) ![NuGet Downloads](https://badgen.net/nuget/dt/SwaggerProvider)

[![Build Status](https://github.com/fsprojects/SwaggerProvider/workflows/Build%20and%20Test/badge.svg?branch=master)](https://github.com/fsprojects/SwaggerProvider/actions?query=branch%3Amaster)
This SwaggerProvider can be used to access RESTful API generated using [Swagger.io](http://swagger.io)

Documentation: http://fsprojects.github.io/SwaggerProvider/
Documentation: <http://fsprojects.github.io/SwaggerProvider/>

## Swagger RESTful API Documentation Specification

Swagger is available for ASP.NET WebAPI APIs with [Swashbuckle](https://github.com/domaindrivendev/Swashbuckle).
Also possible to [Create an ASP.NET API app in Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-dotnet-create-api-app/)


## Maintainer(s)

- [@sergey-tihon](https://github.com/sergey-tihon)

The default maintainer account for projects under "fsprojects" is @fsprojectsgit - F# Community Project Incubation Space (repo management)

6 changes: 6 additions & 0 deletions docs/RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
#### 2.4.0 - Aug 31, 2025

- Microsoft.OpenApi v2.3.0 with OpenAPI v3.1 Support
- Removed dependency on Microsoft.OpenApi.Readers
- Dependencies update

#### 2.3.2 - Oct 11, 2025

- Added support for `text/*` media type (#270) by @spaasis
Expand Down
14 changes: 8 additions & 6 deletions paket.dependencies
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
version 8.0.3
version 9.0.2
source https://api.nuget.org/v3/index.json
storage: none

nuget FSharp.Core ~> 6 // We need task{} CE from F# 6.0
nuget System.Text.Json ~> 6
nuget FSharp.Core ~> 8
nuget System.Text.Json ~> 8
nuget FSharp.SystemTextJson
nuget Microsoft.OpenApi.Readers
nuget Microsoft.OpenApi
nuget Microsoft.OpenApi.YamlReader
nuget NETStandard.Library.NETFramework

# delete when we drop custom parser for v2
Expand All @@ -19,13 +20,14 @@ github fsprojects/FSharp.Data:main src/FSharp.Data.Runtime.Utilities/Pluralizer.
github fsprojects/FSharp.Data:main src/FSharp.Data.Runtime.Utilities/NameUtils.fs

group Server
source https://www.myget.org/F/domaindrivendev/api/v3/index.json
source https://api.nuget.org/v3/index.json
framework: net9.0

nuget Microsoft.AspNetCore
nuget Microsoft.AspNetCore.Mvc
nuget Microsoft.AspNetCore.HttpsPolicy
nuget Swashbuckle.AspNetCore
nuget Swashbuckle.AspNetCore ~> 10.0.0-pr.3283
nuget Microsoft.OpenApi
nuget FSharp.Core
nuget System.Text.Json
Expand All @@ -41,5 +43,5 @@ group Test
nuget Microsoft.NET.Test.Sdk
nuget FsUnit.Xunit

nuget Microsoft.OpenApi.Readers redirects: force
nuget Microsoft.OpenApi
nuget FSharp.SystemTextJson
528 changes: 267 additions & 261 deletions paket.lock

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/Common/AssemblyInfo.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("SwaggerProvider")>]
[<assembly: AssemblyProductAttribute("SwaggerProvider")>]
[<assembly: AssemblyDescriptionAttribute("F# Type Provider for Swagger & Open API")>]
[<assembly: AssemblyVersionAttribute("2.3.2")>]
[<assembly: AssemblyFileVersionAttribute("2.3.2")>]
[<assembly: AssemblyVersionAttribute("2.4.0")>]
[<assembly: AssemblyFileVersionAttribute("2.4.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "SwaggerProvider"
let [<Literal>] AssemblyProduct = "SwaggerProvider"
let [<Literal>] AssemblyDescription = "F# Type Provider for Swagger & Open API"
let [<Literal>] AssemblyVersion = "2.3.2"
let [<Literal>] AssemblyFileVersion = "2.3.2"
let [<Literal>] AssemblyVersion = "2.4.0"
let [<Literal>] AssemblyFileVersion = "2.4.0"
10 changes: 8 additions & 2 deletions src/SwaggerProvider.DesignTime/Provider.OpenApiClient.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace SwaggerProvider

open System
open System.Reflection
open Microsoft.OpenApi.Reader
open ProviderImplementation.ProvidedTypes
open Microsoft.FSharp.Core.CompilerServices
open Swagger
Expand Down Expand Up @@ -66,9 +67,14 @@ type public OpenApiClientTypeProvider(cfg: TypeProviderConfig) as this =
let addCache() =
lazy
let schemaData = SchemaReader.readSchemaPath "" schemaPath |> Async.RunSynchronously
let openApiReader = Microsoft.OpenApi.Readers.OpenApiStringReader()

let (schema, diagnostic) = openApiReader.Read(schemaData)
let settings = OpenApiReaderSettings()
settings.AddYamlReader()

let readResult =
Microsoft.OpenApi.OpenApiDocument.Parse(schemaData, settings = settings)

let schema, diagnostic = (readResult.Document, readResult.Diagnostic)

if diagnostic.Errors.Count > 0 then
failwithf
Expand Down
4 changes: 2 additions & 2 deletions src/SwaggerProvider.DesignTime/paket.references
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ File: ProvidedTypes.fsi
File: ProvidedTypes.fs
File: Pluralizer.fs
File: NameUtils.fs

System.Text.Json
Microsoft.OpenApi.Readers
Microsoft.OpenApi
Microsoft.OpenApi.YamlReader

YamlDotNet
2 changes: 1 addition & 1 deletion src/SwaggerProvider.DesignTime/v2/OperationCompiler.fs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type OperationCompiler(schema: SwaggerObject, defCompiler: DefinitionCompiler, i
else
Set.add name existing, name

let required, optional = op.Parameters |> Array.partition(fun x -> x.Required)
let required, optional = op.Parameters |> Array.partition(_.Required)

Array.append required optional
|> Array.fold
Expand Down
12 changes: 6 additions & 6 deletions src/SwaggerProvider.DesignTime/v2/Parser/Parsers.fs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ type SchemaNode() =
/// Gets the string array for the property if it exists. Empty array otherwise.
member this.GetStringArraySafe(propertyName) =
match this.TryGetProperty(propertyName) with
| Some(value) -> value.AsArray() |> Array.map(fun x -> x.AsString())
| Some(value) -> value.AsArray() |> Array.map(_.AsString())
| None -> [||]

module Parsers =
Expand Down Expand Up @@ -138,11 +138,11 @@ module Parsers =
let (|IsEnum|_|)(obj: SchemaNode) =
// Parse `enum` - http://json-schema.org/latest/json-schema-validation.html#anchor76
obj.TryGetProperty("enum")
|> Option.map(fun cases -> cases.AsArray() |> Array.map(fun x -> x.AsString()))
|> Option.map(fun cases -> cases.AsArray() |> Array.map(_.AsString()))

let (|IsRef|_|)(obj: SchemaNode) =
obj.TryGetProperty("$ref") // Parse `$refs`
|> Option.map(fun ref -> ref.AsString())
|> Option.map(_.AsString())

let (|IsArray|_|)(obj: SchemaNode) =
// Parse Arrays - http://json-schema.org/latest/json-schema-validation.html#anchor36
Expand Down Expand Up @@ -182,7 +182,7 @@ module Parsers =
let requiredProperties =
match obj.TryGetProperty("required") with
| None -> Set.empty<_>
| Some(req) -> req.AsArray() |> Array.map(fun x -> x.AsString()) |> Set.ofArray
| Some(req) -> req.AsArray() |> Array.map(_.AsString()) |> Set.ofArray

let properties =
properties.Properties()
Expand All @@ -203,7 +203,7 @@ module Parsers =

let (|IsAllOf|_|)(obj: SchemaNode) =
// Identify composition element 'allOf'
obj.TryGetProperty("allOf") |> Option.map(fun x -> x.AsArray())
obj.TryGetProperty("allOf") |> Option.map(_.AsArray())

let (|IsComposition|_|)(obj: SchemaNode) =
// Models with Object Composition
Expand Down Expand Up @@ -252,7 +252,7 @@ module Parsers =
| IsEnum cases ->
let ty =
obj.TryGetProperty("type")
|> Option.map(fun x -> x.AsString())
|> Option.map(_.AsString())
|> Option.defaultValue "string"

Enum(cases, ty)
Expand Down
Loading
Loading