{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
module Web.Spock.Api
( Endpoint(..)
, Proxy(..)
, MaybeToList
, (<//>), var, Path(..), renderRoute
, Generic, ToJSON, FromJSON, NFData, Typeable
)
where
import Control.DeepSeq
import Data.Aeson
import Data.HVect
import Data.Proxy
import Data.Typeable
import GHC.Generics
import Web.Routing.Combinators
(<//>) :: Path as 'Open -> Path bs ps -> Path (Append as bs) ps
<//> :: Path as 'Open -> Path bs ps -> Path (Append as bs) ps
(<//>) = Path as 'Open -> Path bs ps -> Path (Append as bs) ps
forall (as :: [*]) (bs :: [*]) (ps2 :: PathState).
Path as 'Open -> Path bs ps2 -> Path (Append as bs) ps2
(</>)
data Endpoint (p :: [*]) (i :: Maybe *) (o :: *) where
MethodGet :: (ToJSON o, FromJSON o) => Path p 'Open -> Endpoint p 'Nothing o
MethodPost ::
(ToJSON i, FromJSON i, ToJSON o, FromJSON o)
=> Proxy (i -> o) -> Path p 'Open -> Endpoint p ('Just i) o
MethodPut ::
(ToJSON i, FromJSON i, ToJSON o, FromJSON o)
=> Proxy (i -> o) -> Path p 'Open -> Endpoint p ('Just i) o