module Network.YAML.Scotty (servePost, servePostT) where
import Control.Monad.Morph
import Control.Monad.IO.Class
import Web.Scotty
import qualified Web.Scotty.Trans as Trans
import Network.HTTP.Types
import qualified Data.Text as T
import Data.Aeson hiding (json)
import Network.YAML.API
import Network.YAML.TH.Dispatcher
servePost :: Dispatcher IO -> ScottyM ()
servePost dispatcher = post "/:method" $ do
methodName <- param "method"
case dispatcher methodName of
Nothing -> status status404
Just method -> do
args <- jsonData
result <- liftIO $ method args
json result
servePostT :: (Trans.ScottyError e, MonadIO m) => Dispatcher m -> Trans.ScottyT e m ()
servePostT dispatcher = Trans.post "/:method" $ do
methodName <- Trans.param "method"
case dispatcher methodName of
Nothing -> Trans.status status404
Just method -> do
args <- Trans.jsonData
result <- lift $ method args
Trans.json result