-
-
Notifications
You must be signed in to change notification settings - Fork 6.9k
[FEATURE][Haskell] Add Middleware support for the haskell servant generator #4056
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEATURE][Haskell] Add Middleware support for the haskell servant generator #4056
Conversation
reviewers/cc: @gibiansky @f-f @mandrean |
@@ -211,13 +212,13 @@ call{{title}} env f = do | |||
-- | Run the {{title}} server at the provided host and port. | |||
run{{title}}Server | |||
:: (MonadIO m, MonadThrow m) | |||
=> Config -> {{title}}Backend (ExceptT ServerError IO) -> m () | |||
run{{title}}Server Config{..} backend = do | |||
=> Config -> Middleware -> {{title}}Backend (ExceptT ServerError IO) -> m () |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd say instead of changing the signature of this function we could add a run{{title}}ServerWithMiddleware
function, and provide the default implementation of the middleware here
In this way we wouldn't have to document how to get a default middleware, since we'd have that already implemented
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That would be a good Idea to keep backwards-compability, though I would keep the documentation since I think that the call with middleware should be the preferred one since an ID-function does not add any runtime overhead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this way we wouldn't have to document how to get a default middleware, since we'd have that already implemented
The 'default'-Middleware is literally just id
and the example-server would have that as default.
I fear that if one adds wrappers for this it could start to set a precedence for every case where this could be extended.
Another "clean" solution could be to add a datatype:
data ServerConfig = ServerConfig { serverMiddleware :: Middleware }
deriving (....)
defaultServerConfig = ServerConfig id
-- or with data-default
instance Default ServerConfig where
def = ServerConfig id
and people using defaultServerConfig
would not be affected if we change things in any way in the future. Especially if the use the Default
-Pattern: http://hackage.haskell.org/package/data-default
let myConfig = defaultServerConfig { serverMiddleware = myMiddleware }
-- or with data-default
let myConfig = def { serverMiddleware = myMiddleware }
This way we would never have to update/break the type-signature of the implementation for all future versions.
…r and added a backwards compability version runOpenAPIPetstoreServer using requestMiddlewareId as middleware.
* 'master' of github.com:OpenAPITools/openapi-generator: (88 commits) smaller tests, better code format (#4355) csharp-netcore: Replace null literals with default (#4345) [core] consider polymorphism when computing unused schemas (#4335) Fix issue 4326 forward throws for delegate to main method (#4327) [kotlin][client] annotate api exceptions (#4339) refactor java-vertx-web parameters and bugfix on non primitive parameter (#4353) Remove deprecated API use of ObjectFactory.property() (#2613) (#4352) [python][metadata]: Adding license and author fields (#4318) [Python] Avoid pep8 violation (#4316) [JS] Update package.json (#4261) Add slash-arun to Python technical committee (#4354) [typescript-fetch] Fix discriminator mapping name (#4340) fix security alerts reported by github (#4344) fix cpp-restbed-server json field serialization #4320 (#4323) typescript-angular: fix oneOf and anyOf generates incorrect model for primitive types (#4341) fix(typescript-angular): do not call .toISOString() on a string (#4330) (#4337) update samples (#4334) Prepare 4.2.0 release (#4333) [FEATURE][Haskell] Haskell-Servant serves static files (#4058) [FEATURE][Haskell] Add Middleware support for the haskell servant generator (#4056) ...
* master: (142 commits) smaller tests, better code format (#4355) csharp-netcore: Replace null literals with default (#4345) [core] consider polymorphism when computing unused schemas (#4335) Fix issue 4326 forward throws for delegate to main method (#4327) [kotlin][client] annotate api exceptions (#4339) refactor java-vertx-web parameters and bugfix on non primitive parameter (#4353) Remove deprecated API use of ObjectFactory.property() (#2613) (#4352) [python][metadata]: Adding license and author fields (#4318) [Python] Avoid pep8 violation (#4316) [JS] Update package.json (#4261) Add slash-arun to Python technical committee (#4354) [typescript-fetch] Fix discriminator mapping name (#4340) fix security alerts reported by github (#4344) fix cpp-restbed-server json field serialization #4320 (#4323) typescript-angular: fix oneOf and anyOf generates incorrect model for primitive types (#4341) fix(typescript-angular): do not call .toISOString() on a string (#4330) (#4337) update samples (#4334) Prepare 4.2.0 release (#4333) [FEATURE][Haskell] Haskell-Servant serves static files (#4058) [FEATURE][Haskell] Add Middleware support for the haskell servant generator (#4056) ...
* master: (141 commits) smaller tests, better code format (OpenAPITools#4355) csharp-netcore: Replace null literals with default (OpenAPITools#4345) [core] consider polymorphism when computing unused schemas (OpenAPITools#4335) Fix issue 4326 forward throws for delegate to main method (OpenAPITools#4327) [kotlin][client] annotate api exceptions (OpenAPITools#4339) refactor java-vertx-web parameters and bugfix on non primitive parameter (OpenAPITools#4353) Remove deprecated API use of ObjectFactory.property() (OpenAPITools#2613) (OpenAPITools#4352) [python][metadata]: Adding license and author fields (OpenAPITools#4318) [Python] Avoid pep8 violation (OpenAPITools#4316) [JS] Update package.json (OpenAPITools#4261) Add slash-arun to Python technical committee (OpenAPITools#4354) [typescript-fetch] Fix discriminator mapping name (OpenAPITools#4340) fix security alerts reported by github (OpenAPITools#4344) fix cpp-restbed-server json field serialization OpenAPITools#4320 (OpenAPITools#4323) typescript-angular: fix oneOf and anyOf generates incorrect model for primitive types (OpenAPITools#4341) fix(typescript-angular): do not call .toISOString() on a string (OpenAPITools#4330) (OpenAPITools#4337) update samples (OpenAPITools#4334) Prepare 4.2.0 release (OpenAPITools#4333) [FEATURE][Haskell] Haskell-Servant serves static files (OpenAPITools#4058) [FEATURE][Haskell] Add Middleware support for the haskell servant generator (OpenAPITools#4056) ...
PR checklist
./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
. If contributing template-only or documentation-only changes which will change sample output, be sure to build the project first.master
,4.1.x
,5.0.x
. Default:master
.Description of the PR
I added middleware support to the haskell servant generator and extended the example to handle the additional middleware parameter.