1{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveAnyClass #-}
3{-# LANGUAGE OverloadedLists #-}
4{-# LANGUAGE OverloadedStrings #-}
10import Data.Text (Text)
14import Data.OpenApi.Declare
15import Data.OpenApi.Lens
16import Data.OpenApi.Operation
20data UserSummary = UserSummary
21 { summaryUsername :: Username
22 , summaryUserid :: Int
25instance ToSchema UserSummary where
26 declareNamedSchema _ = do
27 usernameSchema <- declareSchemaRef (Proxy :: Proxy Username)
28 useridSchema <- declareSchemaRef (Proxy :: Proxy Int)
29 return $ NamedSchema (Just "UserSummary") $ mempty
30 & type_ ?~ OpenApiObject
32 [ ("summaryUsername", usernameSchema )
33 , ("summaryUserid" , useridSchema )
35 & required .~ [ "summaryUsername"
41data UserDetailed = UserDetailed
42 { username :: Username
45 } deriving (Generic, ToSchema)
47newtype Package = Package { packageName :: Text }
48 deriving (Generic, ToSchema)
50hackageOpenApi :: OpenApi
51hackageOpenApi = spec & components.schemas .~ defs
53 (defs, spec) = runDeclare declareHackageOpenApi mempty
55declareHackageOpenApi :: Declare (Definitions Schema) OpenApi
56declareHackageOpenApi = do
58 let usernameParamSchema = toParamSchema (Proxy :: Proxy Username)
61 userSummaryResponse <- declareResponse "application/json" (Proxy :: Proxy UserSummary)
62 userDetailedResponse <- declareResponse "application/json" (Proxy :: Proxy UserDetailed)
63 packagesResponse <- declareResponse "application/json" (Proxy :: Proxy [Package])
67 [ ("/users", mempty & get ?~ (mempty
68 & at 200 ?~ Inline userSummaryResponse))
69 , ("/user/{username}", mempty & get ?~ (mempty
70 & parameters .~ [ Inline $ mempty
74 & schema ?~ Inline usernameParamSchema ]
75 & at 200 ?~ Inline userDetailedResponse))
76 , ("/packages", mempty & get ?~ (mempty
77 & at 200 ?~ Inline packagesResponse))
81main = putStrLn . read . show . encode $ hackageOpenApi
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list