diff --git a/Setup.hs b/Setup.hs new file mode 100644 index 00000000..9a994af6 --- /dev/null +++ b/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/docs.sh b/docs.sh new file mode 100644 index 00000000..e4723d66 --- /dev/null +++ b/docs.sh @@ -0,0 +1,52 @@ +SERVANT_DIR=/tmp/servant-docs-gh-pages + +# Make a temporary clone + +rm -rf $SERVANT_DIR + +git clone . $SERVANT_DIR + +cd $SERVANT_DIR + +# Make sure to pull the latest + +git remote add haskell-servant git@github.com:haskell-servant/servant-docs.git + +git fetch haskell-servant + +git reset --hard haskell-servant/gh-pages + +# Clear everything away + +git rm -rf $SERVANT_DIR/* + +# Switch back and build the haddocks + +cd - + +cabal configure --builddir=$SERVANT_DIR + +cabal haddock --hoogle --hyperlink-source --html-location='https://hackage.haskell.org/package/$pkg-$version/docs' --builddir=$SERVANT_DIR + +commit_hash=$(git rev-parse HEAD) + +# Move the HTML docs to the root + +cd $SERVANT_DIR + +rm * +rm -rf build +mv doc/html/servant-docs/* . +rm -r doc/ + +# Add everything + +git add . + +git commit -m "Built from $commit_hash" + +# Push to update the pages + +git push haskell-servant HEAD:gh-pages + +rm -rf $SERVANT_DIR diff --git a/example/greet.hs b/example/greet.hs index aac8052b..311ef060 100644 --- a/example/greet.hs +++ b/example/greet.hs @@ -4,9 +4,10 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} import Data.Aeson +import Data.Proxy import Data.Text import GHC.Generics -import Servant +import Servant.API import Servant.Docs -- * Example diff --git a/servant-docs.cabal b/servant-docs.cabal index 3a48559f..1c049007 100644 --- a/servant-docs.cabal +++ b/servant-docs.cabal @@ -1,64 +1,10 @@ name: servant-docs -version: 0.2 +version: 0.2.1 synopsis: generate API docs for your servant webservice description: Library for generating API docs from a servant API definition. . - Runnable example below that prints API docs in markdown. - . - > {-# LANGUAGE DataKinds #-} - > {-# LANGUAGE PolyKinds #-} - > {-# LANGUAGE TypeFamilies #-} - > {-# LANGUAGE DeriveGeneric #-} - > {-# LANGUAGE TypeOperators #-} - > {-# LANGUAGE FlexibleInstances #-} - > {-# LANGUAGE OverloadedStrings #-} - > - > import Data.Proxy - > import Data.Text - > import Servant - > - > -- our type for a Greeting message - > data Greet = Greet { _msg :: Text } - > deriving (Generic, Show) - > - > -- we get our JSON serialization for free - > instance FromJSON Greet - > instance ToJSON Greet - > - > -- we provide a sample value for the 'Greet' type - > instance ToSample Greet where - > toSample = Just g - > - > where g = Greet "Hello, haskeller!" - > - > instance ToParam (QueryParam "capital" Bool) where - > toParam _ = - > DocQueryParam "capital" - > ["true", "false"] - > "Get the greeting message in uppercase (true) or not (false). Default is false." - > - > instance ToCapture (Capture "name" Text) where - > toCapture _ = DocCapture "name" "name of the person to greet" - > - > instance ToCapture (Capture "greetid" Text) where - > toCapture _ = DocCapture "greetid" "identifier of the greet msg to remove" - > - > -- API specification - > type TestApi = - > "hello" :> Capture "name" Text :> QueryParam "capital" Bool :> Get Greet - > :<|> "greet" :> RQBody Greet :> Post Greet - > :<|> "delete" :> Capture "greetid" Text :> Delete - > - > testApi :: Proxy TestApi - > testApi = Proxy - > - > -- Generate the Documentation's ADT - > greetDocs :: API - > greetDocs = docs testApi - > - > main :: IO () - > main = putStrLn $ markdown greetDocs + Runnable example . license: BSD3 license-file: LICENSE author: Alp Mestanogullari, Sönke Hahn, Julian K. Arni @@ -83,7 +29,7 @@ library , bytestring , hashable , lens - , servant >= 0.2 + , servant >= 0.2.1 , string-conversions , system-filepath , text diff --git a/src/Servant/Docs.hs b/src/Servant/Docs.hs index 99d619d8..606d2dda 100644 --- a/src/Servant/Docs.hs +++ b/src/Servant/Docs.hs @@ -119,7 +119,7 @@ import Data.Text (Text, pack, unpack) import Data.String.Conversions import GHC.Generics import GHC.TypeLits -import Servant +import Servant.API import qualified Data.HashMap.Strict as HM