Compare commits

...

4 Commits

Author SHA1 Message Date
Patrick Stevens
f30a73fd4f Bump WoofWare.Whippet.Fantomas (#373) 2025-04-21 21:36:26 +00:00
Patrick Stevens
b2d64562bf Support octet-stream content type in Swagger gen (#372) 2025-04-21 20:57:51 +00:00
Patrick Stevens
e7e629613e Work around Gitea's malformed responses again (#371) 2025-04-21 20:07:44 +00:00
Patrick Stevens
4560138b59 Work around a strange Gitea behaviour (#370) 2025-04-21 20:49:32 +01:00
4 changed files with 27 additions and 17 deletions

View File

@@ -198,7 +198,14 @@ and ObjectTypeDefinition =
|> Map.ofSeq
|> Some
let example = asObjOpt node "example"
let example =
match node.["example"] with
| null -> None
| :? JsonObject as o -> Some o
| _ ->
// Gitea returns a stringified and malformed JSON object here.
// Don't throw; just omit.
None
let required = asArrOpt'<string> node "required"

View File

@@ -1,7 +1,6 @@
namespace WoofWare.Myriad.Plugins
open System.Collections.Generic
open System.IO
open System.Threading
open Fantomas.FCS.Syntax
open Fantomas.FCS.Xml
@@ -19,6 +18,7 @@ type internal SwaggerClientConfig =
type internal Produces =
// TODO: this will cope with decoding JSON, plain text, etc
| Produces of string
| OctetStream
type internal Endpoint =
{
@@ -47,16 +47,8 @@ type internal Types =
[<RequireQualifiedAccess>]
module internal SwaggerClientGenerator =
let outputFile = FileInfo "/tmp/output.txt"
// do
// use _ = File.Create outputFile.FullName
// ()
let log (line : string) =
// use w = outputFile.AppendText ()
// w.WriteLine line
()
let internal log (_ : string) = ()
let renderType (types : Types) (defn : Definition) : SynType option =
match types.ByDefinition.TryGetValue defn with
@@ -477,6 +469,15 @@ module internal SwaggerClientGenerator =
(SynLongIdent.createS' [ "RestEase" ; "Header" ])
// Gitea, at least, starts with a `/`, which `Uri` then takes to indicate an absolute path.
(SynExpr.tuple [ SynExpr.CreateConst "Content-Type" ; SynExpr.CreateConst contentType ])
| Produces.OctetStream ->
SynAttribute.create
(SynLongIdent.createS' [ "RestEase" ; "Header" ])
// Gitea, at least, starts with a `/`, which `Uri` then takes to indicate an absolute path.
(SynExpr.tuple
[
SynExpr.CreateConst "Content-Type"
SynExpr.CreateConst "application/octet-stream"
])
]
returnType
@@ -512,6 +513,7 @@ module internal SwaggerClientGenerator =
|> List.singleton
open Myriad.Core
open System.IO
/// Myriad generator that stamps out an interface and class to access a Swagger-specified API.
[<MyriadGenerator("swagger-client")>]
@@ -622,10 +624,11 @@ type SwaggerClientGenerator () =
let produces =
match endpoint.Produces with
| None -> Produces "json"
| None -> Produces.Produces "json"
| Some [] -> failwith $"API specified empty Produces: %s{path} (%O{method})"
| Some [ MimeType "application/json" ] -> Produces "json"
| Some [ MimeType (StartsWith "text/" t) ] -> Produces t
| Some [ MimeType "application/octet-stream" ] -> Produces.OctetStream
| Some [ MimeType "application/json" ] -> Produces.Produces "json"
| Some [ MimeType (StartsWith "text/" t) ] -> Produces.Produces t
| Some [ MimeType s ] ->
failwithf
$"we don't support non-JSON Produces right now, got: %s{s} (%s{path} %O{method})"

View File

@@ -22,7 +22,7 @@
<ItemGroup>
<PackageReference Include="Myriad.Core" Version="0.8.3" />
<PackageReference Include="TypeEquality" Version="0.3.0" />
<PackageReference Include="WoofWare.Whippet.Fantomas" Version="0.6.2" />
<PackageReference Include="WoofWare.Whippet.Fantomas" Version="0.6.3" />
<!-- the lowest version allowed by Myriad.Core -->
<PackageReference Update="FSharp.Core" Version="6.0.1" PrivateAssets="all"/>
</ItemGroup>

View File

@@ -381,7 +381,7 @@
},
{
"pname": "WoofWare.Whippet.Fantomas",
"version": "0.6.2",
"hash": "sha256-nDT/W5eBwM/E+Z2oQ80maAGYrEyRJQXL1unxR9q6ztU="
"version": "0.6.3",
"hash": "sha256-FkW/HtVp8/HE2k6d7yFpnJcnP3FNNe9kGlkoIWmNgDw="
}
]