@@ -13,6 +13,7 @@ import GHC.Generics
1313import Data.Swagger
1414import Data.Swagger.Declare
1515import Data.Swagger.Lens
16+import Data.Swagger.Operation
1617
1718type Username = Text
1819
@@ -37,32 +38,33 @@ hackageSwagger = spec & definitions .~ defs
3738 where
3839 (defs, spec) = runDeclare declareHackageSwagger mempty
3940
40−declareHackageSwagger :: Declare Definitions Swagger
41+declareHackageSwagger :: Declare (Definitions Schema) Swagger
4142declareHackageSwagger = do
43+ -- param schemas
4244 let usernameParamSchema = toParamSchema (Proxy :: Proxy Username)
43− userSummarySchemaRef <- declareSchemaRef (Proxy :: Proxy UserSummary)
44− userDetailedSchemaRef <- declareSchemaRef (Proxy :: Proxy UserDetailed)
45− packagesSchemaRef <- declareSchemaRef (Proxy :: Proxy [Package])
45+
46+ -- responses
47+ userSummaryResponse <- declareResponse (Proxy :: Proxy UserSummary)
48+ userDetailedResponse <- declareResponse (Proxy :: Proxy UserDetailed)
49+ packagesResponse <- declareResponse (Proxy :: Proxy [Package])
50+
4651 return $ mempty
47− & paths.pathsMap .~
48− [ ("/users", mempty & pathItemGet ?~ (mempty
49− & operationProduces ?~ MimeList ["application/json"]
50− & operationResponses .~ (mempty
51− & responsesResponses . at 200 ?~ Inline (mempty & responseSchema ?~ userSummarySchemaRef))))
52− , ("/user/{username}", mempty & pathItemGet ?~ (mempty
53− & operationProduces ?~ MimeList ["application/json"]
54− & operationParameters .~ [ Inline $ mempty
55− & paramName .~ "username"
56− & paramRequired ?~ True
57− & paramSchema .~ ParamOther (mempty
58− & paramOtherSchemaIn .~ ParamPath
59− & paramOtherSchemaParamSchema .~ usernameParamSchema) ]
60− & operationResponses .~ (mempty
61− & responsesResponses . at 200 ?~ Inline (mempty & responseSchema ?~ userDetailedSchemaRef))))
62− , ("/packages", mempty & pathItemGet ?~ (mempty
63− & operationProduces ?~ MimeList ["application/json"]
64− & operationResponses .~ (mempty
65− & responsesResponses . at 200 ?~ Inline (mempty & responseSchema ?~ packagesSchemaRef))))
52+ & paths .~
53+ [ ("/users", mempty & get ?~ (mempty
54+ & produces ?~ MimeList ["application/json"]
55+ & at 200 ?~ Inline userSummaryResponse))
56+ , ("/user/{username}", mempty & get ?~ (mempty
57+ & produces ?~ MimeList ["application/json"]
58+ & parameters .~ [ Inline $ mempty
59+ & name .~ "username"
60+ & required ?~ True
61+ & schema .~ ParamOther (mempty
62+ & in_ .~ ParamPath
63+ & paramSchema .~ usernameParamSchema) ]
64+ & at 200 ?~ Inline userDetailedResponse))
65+ , ("/packages", mempty & get ?~ (mempty
66+ & produces ?~ MimeList ["application/json"]
67+ & at 200 ?~ Inline packagesResponse))
6668 ]
6769
6870main :: IO ()