Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
67fe83a
Add OpenAPI support for AutoRoute JSON views
vincentcombey-design Mar 20, 2026
65cd110
Fix OpenAPI review findings
vincentcombey-design Mar 20, 2026
27c224c
Add Swagger UI OpenAPI routes
vincentcombey-design Mar 20, 2026
fb77e2a
Add openapi3 to ihp Nix derivation
vincentcombey-design Mar 20, 2026
0e8d557
Add regression test for Api action names
vincentcombey-design Mar 20, 2026
f881ab9
Add OpenAPI request body docs
vincentcombey-design Apr 7, 2026
0b0b6bf
Export request body docs for OpenAPI
vincentcombey-design Apr 7, 2026
77389c8
Fix OpenAPI test imports
vincentcombey-design Apr 7, 2026
a118f67
Remove redundant OpenAPI test import
vincentcombey-design Apr 7, 2026
93110cc
Tie OpenAPI request bodies to actions
vincentcombey-design Apr 7, 2026
d807ab0
Simplify action request body docs
vincentcombey-design Apr 7, 2026
00649fe
Remove loose OpenAPI request body helper
vincentcombey-design Apr 7, 2026
2e3c0e8
Tighten typed action request body decode
vincentcombey-design Apr 7, 2026
c97baf8
Decode request bodies by registered type
vincentcombey-design Apr 7, 2026
7e81813
Store request body type reps concretely
vincentcombey-design Apr 7, 2026
2a01d93
Add OpenAPI action doc setters
vincentcombey-design Apr 23, 2026
52bd62e
Fix JsonView OpenAPI docs after rebase
vincentcombey-design Apr 24, 2026
5e10096
Add typed OpenAPI action definitions
vincentcombey-design Apr 24, 2026
2088e9e
Make OpenAPI endpoint definitions authoritative
vincentcombey-design Apr 24, 2026
d738674
Remove ActionDefinition runner boilerplate
vincentcombey-design Apr 24, 2026
7b75149
Document supported custom OpenAPI routes
vincentcombey-design Apr 24, 2026
2546e21
Infer OpenAPI request bodies from handlers
vincentcombey-design Apr 24, 2026
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
Prev Previous commit
Next Next commit
Tighten typed action request body decode
  • Loading branch information
vincentcombey-design committed Apr 24, 2026
commit 2e3c0e8e6b1e461736ca2e4159126f02c30bfef4
10 changes: 8 additions & 2 deletions ihp/IHP/RouterSupport.hs
Original file line number Diff line number Diff line change
Expand Up @@ -321,12 +321,18 @@ setOpenApiOperationId operationId ActionDoc{actionDocName, actionDocSummary, act
{-# INLINE setOpenApiOperationId #-}

decodeActionRequestBody ::
forall controller actionName.
forall actionName controller.
( HasOpenApiRequestBody controller actionName
, Data controller
, ?request :: Request
, ?theAction :: controller
) =>
IO (Either String (OpenApiRequestBody controller actionName))
decodeActionRequestBody =
decodeActionRequestBody = do
let expectedActionName = symbolVal (Proxy @actionName)
let actualActionName = showConstr (toConstr ?theAction)
unless (actualActionName == expectedActionName) do
fail ("decodeActionRequestBody expected action " <> expectedActionName <> " but current action is " <> actualActionName)
JSON.eitherDecode <$> getRequestBody
{-# INLINE decodeActionRequestBody #-}

Expand Down
2 changes: 1 addition & 1 deletion ihp/Test/Test/OpenApiSupportSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ instance Controller DocumentedCustomPathController where

instance Controller CrudNamedApiController where
action CreateApiSessionAction = do
requestBodyResult <- decodeActionRequestBody @CrudNamedApiController @"CreateApiSessionAction"
requestBodyResult <- decodeActionRequestBody @"CreateApiSessionAction"
case requestBodyResult of
Left _ -> renderPlain "Invalid JSON"
Right (_ :: CreateSessionRequest) -> render AckView
Expand Down