--- #prune
+{-# OPTIONS_HADDOCK prune #-}
-- | Repository of the resources in httpd.
module Network.HTTP.Lucu.Resource.Tree
import Control.Exception
import Control.Monad
import qualified Data.ByteString.Char8 as C8
-import Data.Dynamic
import Data.List
import qualified Data.Map as M
import Data.Map (Map)
where
walkTree :: ResSubtree -> [String] -> [String] -> Maybe ([String], ResourceDef)
+ walkTree _ [] _
+ = error "Internal error: should not reach here."
+
walkTree tree (name:[]) soFar
= case M.lookup name tree of
Nothing -> Nothing
Just _ -> xs
Nothing -> []
- processException :: Exception -> IO ()
+ toAbortion :: SomeException -> Abortion
+ toAbortion e = case fromException e of
+ Just abortion -> abortion
+ Nothing -> Abortion InternalServerError emptyHeaders (Just (show e))
+
+ processException :: SomeException -> IO ()
processException exc
- = do let abo = case exc of
- ErrorCall msg -> Abortion InternalServerError emptyHeaders $ Just msg
- IOException ioE -> Abortion InternalServerError emptyHeaders $ Just $ formatIOE ioE
- DynException dynE -> case fromDynamic dynE of
- Just a
- -> a :: Abortion
- Nothing
- -> Abortion InternalServerError emptyHeaders
- $ Just $ show exc
- _ -> Abortion InternalServerError emptyHeaders $ Just $ show exc
+ = do let abo = toAbortion exc
conf = itrConfig itr
-- まだ DecidingHeader 以前の状態だったら、この途中終了
-- を應答に反映させる餘地がある。さうでなければ stderr