module Yam.Trace where

import qualified Data.Vault.Lazy as L
import           Network.Wai
import           Yam.Logger
import           Yam.Types

traceMw :: Middleware
traceMw app req resH = do
  traceId <- randomString 12
  let h = ("X-TRACE-ID",encodeUtf8 traceId)
  app req {vault = L.insert extensionLogKey traceId (vault req)} (resH . mapResponseHeaders (h:))

traceMiddleware :: Bool -> AppMiddleware
traceMiddleware enabled = simpleWebMiddleware (enabled, "Trace") traceMw