1 module Network.HTTP.Lucu.Abortion
3 , abort -- MonadIO m => StatusCode -> [ (String, String) ] -> String -> m a
4 , abortIO -- StatusCode -> [ (String, String) ] -> String -> IO a
5 , abortSTM -- StatusCode -> [ (String, String) ] -> String -> STM a
6 , abortA -- ArrowIO a => StatusCode -> [ (String, String) ] -> String -> a b c
7 , aboPage -- Config -> Abortion -> String
12 import Control.Arrow.ArrowIO
13 import Control.Concurrent.STM
14 import Control.Exception
15 import Control.Monad.Trans
16 import GHC.Conc (unsafeIOToSTM)
18 import Network.HTTP.Lucu.Config
19 import Network.HTTP.Lucu.DefaultPage
20 import Network.HTTP.Lucu.Headers
21 import Network.HTTP.Lucu.Response
22 import System.IO.Unsafe
23 import Text.XML.HXT.Arrow.WriteDocument
24 import Text.XML.HXT.Arrow.XmlArrow
25 import Text.XML.HXT.Arrow.XmlIOStateArrow
26 import Text.XML.HXT.DOM.XmlKeywords
29 data Abortion = Abortion {
30 aboStatus :: StatusCode
31 , aboHeaders :: Headers
32 , aboMessage :: String
33 } deriving (Show, Typeable)
36 abort :: MonadIO m => StatusCode -> [ (String, String) ] -> String -> m a
37 abort status headers msg
38 = liftIO $ abortIO status headers msg
41 abortIO :: StatusCode -> [ (String, String) ] -> String -> IO a
42 abortIO status headers msg
43 = let abo = Abortion status headers msg
44 exc = DynException (toDyn abo)
49 abortSTM :: StatusCode -> [ (String, String) ] -> String -> STM a
50 abortSTM status headers msg
51 = unsafeIOToSTM $ abortIO status headers msg
54 abortA :: ArrowIO a => StatusCode -> [ (String, String) ] -> String -> a b c
55 abortA status headers msg
56 = arrIO0 $ abortIO status headers msg
59 aboPage :: Config -> Abortion -> String
61 = let [html] = unsafePerformIO
62 $ runX ( mkDefaultPage conf (aboStatus abo) (txt $ aboMessage abo)
64 writeDocumentToString [(a_indent, v_1)]