packages feed

wai-middleware-openapi-0.1.0.0: src/Network/Wai/Middleware/OpenApi/Validate.hs

module Network.Wai.Middleware.OpenApi.Validate
  ( ValidateT (..)
  , runValidateT
  ) where

import Prelude

import Control.Monad.Except
import Control.Monad.State
import Network.Wai (Request)

newtype ValidateT e m a = ValidateT
  { unwrap :: ExceptT e (StateT Request m) a
  }
  deriving newtype
    ( Applicative
    , Functor
    , Monad
    , MonadError e
    , MonadIO
    , MonadState Request
    )

runValidateT
  :: Request
  -> ValidateT e m a
  -> m (Either e a, Request)
runValidateT request f = runStateT (runExceptT f.unwrap) request