Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
71 changes: 51 additions & 20 deletions cli/src/Cli.elm
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ type alias CliOptions =
, outputModuleName : Maybe String
, effectTypes : List OpenApi.Config.EffectType
, generateTodos : Bool
, autoConvertSwagger : Bool
, autoConvertSwagger : OpenApi.Config.AutoConvertSwagger
, swaggerConversionUrl : Maybe String
, swaggerConversionCommand : Maybe String
, swaggerConversionCommandArgs : List String
Expand Down Expand Up @@ -73,7 +73,9 @@ program =
|> Cli.OptionsParser.with
(Cli.Option.flag "generateTodos")
|> Cli.OptionsParser.with
(Cli.Option.flag "auto-convert-swagger")
(Cli.Option.optionalKeywordArg "auto-convert-swagger"
|> Cli.Option.validateMap autoConvertValidation
)
|> Cli.OptionsParser.with
(Cli.Option.optionalKeywordArg "swagger-conversion-url")
|> Cli.OptionsParser.with
Expand Down Expand Up @@ -131,10 +133,13 @@ options:
a `Servers` module with your servers. You can pass in an
empty object if you have fully dynamic servers.

--auto-convert-swagger If passed in, and a Swagger doc is encountered,
will attempt to convert it to an Open API file.
If not passed in, and a Swagger doc is encountered,
the user will be manually prompted to convert.
--auto-convert-swagger=ask If a Swagger doc is encountered, ask the user before converting
it to an Open API file. This is the default.

--auto-convert-swagger=never If a Swagger doc is encountered, error out.

--auto-convert-swagger[=always] If a Swagger doc is encountered, automatically convert it
to an Open API file.

--swagger-conversion-url The URL to use to convert a Swagger doc to an Open API
file. Defaults to `https://converter.swagger.io/api/convert`.
Expand All @@ -157,6 +162,28 @@ options:
)


autoConvertValidation : Maybe String -> Result String OpenApi.Config.AutoConvertSwagger
autoConvertValidation input =
case input of
Nothing ->
Ok OpenApi.Config.AskBeforeConversion

Just "ask" ->
Ok OpenApi.Config.AskBeforeConversion

Just "" ->
Ok OpenApi.Config.AlwaysConvert

Just "always" ->
Ok OpenApi.Config.AlwaysConvert

Just "never" ->
Ok OpenApi.Config.NeverConvert

Just value ->
Err ("Unexpected value for auto-convert-swagger: " ++ value)


effectTypesValidation : Maybe String -> Result String (List OpenApi.Config.EffectType)
effectTypesValidation str =
case str of
Expand Down Expand Up @@ -518,22 +545,26 @@ decodeOpenApiSpecOrFail { hasAttemptedToConvertFromSwagger } config input value

Ok _ ->
let
askForConversion : BackendTask error Bool
askForConversion =
if OpenApi.Config.autoConvertSwagger config then
BackendTask.succeed True

else
Pages.Script.question
(Ansi.Color.fontColor Ansi.Color.brightCyan (OpenApi.Config.pathToString (OpenApi.Config.oasPath input))
++ """ is a Swagger doc (aka Open API v2) and this tool only supports Open API v3.
shouldConvertTask : BackendTask error Bool
shouldConvertTask =
case OpenApi.Config.autoConvertSwagger config of
OpenApi.Config.AlwaysConvert ->
BackendTask.succeed True

OpenApi.Config.NeverConvert ->
BackendTask.succeed False

OpenApi.Config.AskBeforeConversion ->
Pages.Script.question
(Ansi.Color.fontColor Ansi.Color.brightCyan (OpenApi.Config.pathToString (OpenApi.Config.oasPath input))
++ """ is a Swagger doc (aka Open API v2) and this tool only supports Open API v3.
Would you like to use """
++ Ansi.Color.fontColor Ansi.Color.brightCyan (OpenApi.Config.swaggerConversionUrl config)
++ " to upgrade to v3? (y/n)\n"
)
|> BackendTask.map (\response -> String.toLower response == "y")
++ Ansi.Color.fontColor Ansi.Color.brightCyan (OpenApi.Config.swaggerConversionUrl config)
++ " to upgrade to v3? (y/n)\n"
)
|> BackendTask.map (\response -> String.toLower response == "y")
in
askForConversion
shouldConvertTask
|> BackendTask.andThen
(\shouldConvert ->
if shouldConvert then
Expand Down
2 changes: 1 addition & 1 deletion cli/src/TestGenScript.elm
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ run =
config : OpenApi.Config.Config
config =
OpenApi.Config.init "./generated"
|> OpenApi.Config.withAutoConvertSwagger True
|> OpenApi.Config.withAutoConvertSwagger OpenApi.Config.AlwaysConvert
|> OpenApi.Config.withInput additionalProperties
|> OpenApi.Config.withInput recursiveAllofRefs
|> OpenApi.Config.withInput overridingGlobalSecurity
Expand Down
2 changes: 1 addition & 1 deletion review/suppressed/Docs.NoMissing.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"automatically created by": "elm-review suppress",
"learn more": "elm-review suppress --help",
"suppressions": [
{ "count": 35, "filePath": "src/OpenApi/Config.elm" },
{ "count": 36, "filePath": "src/OpenApi/Config.elm" },
{ "count": 5, "filePath": "src/OpenApi/Generate.elm" }
]
}
19 changes: 13 additions & 6 deletions src/OpenApi/Config.elm
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module OpenApi.Config exposing
( Config, EffectType(..), effectTypeToPackage, Format, Input, Path(..), Server(..)
, init, inputFrom, pathFromString
, withAutoConvertSwagger, withEffectTypes, withFormat, withFormats, withGenerateTodos, withInput, withSwaggerConversionCommand, withSwaggerConversionUrl
, withAutoConvertSwagger, AutoConvertSwagger(..), withEffectTypes, withFormat, withFormats, withGenerateTodos, withInput, withSwaggerConversionCommand, withSwaggerConversionUrl
, withOutputModuleName, withOverrides, withServer, withWriteMergedTo, withWarnOnMissingEnums
, autoConvertSwagger, inputs, outputDirectory, swaggerConversionCommand, swaggerConversionUrl
, oasPath, overrides, writeMergedTo
Expand All @@ -20,7 +20,7 @@ module OpenApi.Config exposing
# Creation

@docs init, inputFrom, pathFromString
@docs withAutoConvertSwagger, withEffectTypes, withFormat, withFormats, withGenerateTodos, withInput, withSwaggerConversionCommand, withSwaggerConversionUrl
@docs withAutoConvertSwagger, AutoConvertSwagger, withEffectTypes, withFormat, withFormats, withGenerateTodos, withInput, withSwaggerConversionCommand, withSwaggerConversionUrl
@docs withOutputModuleName, withOverrides, withServer, withWriteMergedTo, withWarnOnMissingEnums


Expand Down Expand Up @@ -75,14 +75,21 @@ type Config
{ inputs : List Input
, outputDirectory : String
, generateTodos : Bool
, autoConvertSwagger : Bool
, autoConvertSwagger : AutoConvertSwagger
, swaggerConversionUrl : String
, swaggerConversionCommand : Maybe { command : String, args : List String }
, staticFormats : List Format
, dynamicFormats : List { format : String, basicType : Common.BasicType } -> List Format
}


{-| -}
type AutoConvertSwagger
= AlwaysConvert
| NeverConvert
| AskBeforeConversion


{-| -}
type Input
= Input
Expand Down Expand Up @@ -215,7 +222,7 @@ init initialOutputDirectory =
{ inputs = []
, outputDirectory = initialOutputDirectory
, generateTodos = False
, autoConvertSwagger = False
, autoConvertSwagger = AskBeforeConversion
, swaggerConversionUrl = "https://converter.swagger.io/api/convert"
, swaggerConversionCommand = Nothing
, staticFormats = defaultFormats
Expand Down Expand Up @@ -445,7 +452,7 @@ withGenerateTodos generateTodos (Config config) =


{-| -}
withAutoConvertSwagger : Bool -> Config -> Config
withAutoConvertSwagger : AutoConvertSwagger -> Config -> Config
withAutoConvertSwagger newAutoConvertSwagger (Config config) =
Config { config | autoConvertSwagger = newAutoConvertSwagger }

Expand Down Expand Up @@ -520,7 +527,7 @@ swaggerConversionCommand (Config config) =


{-| -}
autoConvertSwagger : Config -> Bool
autoConvertSwagger : Config -> AutoConvertSwagger
autoConvertSwagger (Config config) =
config.autoConvertSwagger

Expand Down