packages feed

helics-wai-0.1.0: src/Network/Helics/Wai.hs

module Network.Helics.Wai (helics, transactionId) where

import Network.Wai
import Data.Vault.Lazy as V
import Network.Helics
import qualified Data.ByteString as S
import System.IO.Unsafe

tidKey :: Key TransactionId
tidKey = unsafePerformIO newKey
{-# NOINLINE tidKey #-}

-- | helics middleware.
helics :: Middleware
helics app req send =
   withTransaction (rawPathInfo req) def $ \tid -> do
   setRequestUrl (rawPathInfo req) tid
   app req { vault = insert tidKey tid (vault req) } send

-- | get TransactionId from request.
transactionId :: Request -> TransactionId
transactionId req = maybe (error "helics middleware is not installed.") id $ V.lookup tidKey (vault req)