@@ -1,6 +1,7 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2{-# LANGUAGE ConstraintKinds #-}
2{-# LANGUAGE ConstraintKinds #-}
3{-# LANGUAGE DataKinds #-}
3{-# LANGUAGE DataKinds #-}
4+{-# LANGUAGE DeriveDataTypeable #-}
4{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE FlexibleInstances #-}
6{-# LANGUAGE FlexibleInstances #-}
6{-# LANGUAGE GeneralizedNewtypeDeriving #-}
7{-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -32,7 +33,7 @@ import Data.Maybe (fromMaybe, mapMaybe)
32import Data.Either (partitionEithers)
33import Data.Either (partitionEithers)
33import Data.String (fromString)
34import Data.String (fromString)
34import Data.String.Conversions (cs, (<>))
35import Data.String.Conversions (cs, (<>))
35−import Data.Tagged (Tagged, untag)
36+import Data.Tagged (Tagged(..), untag)
36import qualified Data.Text as T
37import qualified Data.Text as T
37import Data.Typeable
38import Data.Typeable
38import GHC.TypeLits (KnownNat, KnownSymbol, natVal,
39import GHC.TypeLits (KnownNat, KnownSymbol, natVal,
@@ -52,7 +53,7 @@ import Web.HttpApiData (FromHttpApiData, parseHeader,
52 parseUrlPieceMaybe,
53 parseUrlPieceMaybe,
53 parseUrlPieces)
54 parseUrlPieces)
54import Servant.API ((:<|>) (..), (:>), BasicAuth, Capture,
55import Servant.API ((:<|>) (..), (:>), BasicAuth, Capture,
55− CaptureAll, Verb,
56+ CaptureAll, Verb, EmptyAPI,
56 ReflectMethod(reflectMethod),
57 ReflectMethod(reflectMethod),
57 IsSecure(..), Header, QueryFlag,
58 IsSecure(..), Header, QueryFlag,
58 QueryParam, QueryParams, Raw,
59 QueryParam, QueryParams, Raw,
@@ -532,6 +533,24 @@ instance HasServer api context => HasServer (HttpVersion :> api) context where
532 route Proxy context subserver =
533 route Proxy context subserver =
533 route (Proxy :: Proxy api) context (passToServer subserver httpVersion)
534 route (Proxy :: Proxy api) context (passToServer subserver httpVersion)
536+-- | Singleton type representing a server that serves an empty API.
537+data EmptyServer = EmptyServer deriving (Typeable, Eq, Show, Bounded, Enum)
539+-- | Server for `EmptyAPI`
540+emptyServer :: ServerT EmptyAPI m
541+emptyServer = Tagged EmptyServer
543+-- | The server for an `EmptyAPI` is `emptyAPIServer`.
545+-- > type MyApi = "nothing" :> EmptyApi
547+-- > server :: Server MyApi
548+-- > server = emptyAPIServer
549+instance HasServer EmptyAPI context where
550+ type ServerT EmptyAPI m = Tagged m EmptyServer
552+ route Proxy _ _ = StaticRouter mempty mempty
535-- | Basic Authentication
554-- | Basic Authentication
536instance ( KnownSymbol realm
555instance ( KnownSymbol realm
537 , HasServer api context
556 , HasServer api context