trasa-server-0.4: src/Trasa/Server/Implicit.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
module Trasa.Server.Implicit
(
serve
) where
import Data.Functor.Identity (Identity)
import qualified Network.Wai as WAI
import Trasa.Core
import Trasa.Core.Implicit
import Trasa.Server
serve
:: ( HasMeta route
, HasCaptureDecoding (CaptureStrategy route)
, HasCaptureDecoding (QueryStrategy route)
, RequestBodyStrategy route ~ Many requestBodyStrat
, HasBodyDecoding requestBodyStrat
, ResponseBodyStrategy route ~ Many responseBodyStrat
, HasBodyEncoding responseBodyStrat
, EnumerableRoute route )
=> (forall caps qrys req resp
. route caps qrys req resp
-> Rec Identity caps
-> Rec Parameter qrys
-> RequestBody Identity req
-> TrasaT IO resp)
-> WAI.Application
serve makeResponse = serveWith (transformMeta . meta) makeResponse router
where transformMeta = mapMeta captureDecoding captureDecoding (mapMany bodyDecoding) (mapMany bodyEncoding)