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