{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Main where
import Data.Proxy (Proxy(Proxy))
import Data.Text (Text)
import Servant.API (Capture)
import Servant.Docs
(DocCapture(DocCapture), ToCapture(toCapture), ToSample(toSamples),
docs, markdown)
import Servant.Checked.Exceptions ()
import Api
(Api, BadSearchTermErr(BadSearchTermErr),
IncorrectCapitalization(IncorrectCapitalization), SearchQuery,
SearchResponse)
instance ToSample SearchResponse where
toSamples :: Proxy SearchResponse -> [(Text, SearchResponse)]
toSamples Proxy = [("This is a successful response.", "good")]
instance ToCapture (Capture "query" SearchQuery) where
toCapture :: Proxy (Capture "query" SearchQuery) -> DocCapture
toCapture Proxy =
DocCapture "query" "a search string like \"hello\" or \"bye\""
instance ToSample BadSearchTermErr where
toSamples :: Proxy BadSearchTermErr -> [(Text, BadSearchTermErr)]
toSamples Proxy =
[("a completely incorrect search term was used", BadSearchTermErr)]
instance ToSample IncorrectCapitalization where
toSamples :: Proxy IncorrectCapitalization -> [(Text, IncorrectCapitalization)]
toSamples Proxy =
[ ( "the search term \"Hello\" has not been capitalized correctly"
, IncorrectCapitalization)
]
main :: IO ()
main = putStrLn . markdown $ docs (Proxy :: Proxy Api)