module Rest.Run
( apiToHandler
, apiToHandler'
) where
import qualified Data.ByteString.Lazy.UTF8 as UTF8
import Rest.Api (Api)
import Rest.Dictionary ( Dicts (..) )
import Rest.Driver.Perform
import Rest.Driver.Routing
import Rest.Driver.Types
apiToHandler :: Rest m => Api m -> m UTF8.ByteString
apiToHandler = apiToHandler' id
apiToHandler' :: Rest n => Run m n -> Api m -> n UTF8.ByteString
apiToHandler' run api = do
method <- getMethod
paths <- getPaths
case route method paths api of
Left e -> failureWriter None e
Right h -> writeResponse (mapHandler run h)