module WebWire.Types
(
WebException(..),
WebOutput(..),
WebWire,
RedirectType(..),
SimpleWire,
WebConfig(..)
)
where
import qualified Data.ByteString.Char8 as BC
import qualified Data.Text as T
import Blaze.ByteString.Builder
import Control.Exception
import Control.Monad.Trans.State
import Data.ByteString (ByteString)
import Data.CaseInsensitive (CI)
import Data.Map (Map)
import Data.Text (Text)
import Data.Typeable
import FRP.NetWire
import Network.HTTP.Types
import Network.Wai
import Network.Wai.Parse
import Text.Blaze
import WebWire.Widget
data RedirectType
= RedirectPermanent
| RedirectSeeOther
| RedirectTemporary
type SimpleWire = WebWire ()
data WebConfig site =
WebConfig {
wcCookies :: Map ByteString ByteString,
wcCurrentPath :: [Text],
wcPostParams :: Map ByteString ByteString,
wcPostFiles :: Map ByteString (FileInfo FilePath),
wcQueryParams :: Map ByteString ByteString,
wcRequest :: Request,
wcRequestPath :: [Text],
wcRootPath :: [Text],
wcSetCookies :: Map ByteString ByteString,
wcSetHeaders :: [(CI Ascii, Ascii)],
wcSite :: site,
wcWidget :: Widget
}
data WebException
= WebException Status
| WebRedirect Status Text
deriving (Typeable)
instance Show WebException where
show (WebException (Status code msg)) =
show code ++ ": " ++ BC.unpack msg
show (WebRedirect (Status code msg) uri) =
show code ++ ": " ++ BC.unpack msg ++ " <" ++ T.unpack uri ++ ">"
instance Exception WebException
data WebOutput
= GenOutput Bool Ascii Builder
| HtmlOutput Bool Html
| TextOutput Bool Builder
type WebWire site = Wire (StateT (WebConfig site) IO)