module Lucienne.Controller.Message (Message (..), getMessages, withMessage, readParameter) where import qualified Happstack.Server as S import Control.Applicative (optional,(<$>)) import Lucienne.Controller (Controller) import Lucienne.Url (Url) data Message = UsernameExists | CheckPassword | UserCreated | AlreadySubscribed deriving (Read,Show) toMessage :: Message -> String toMessage msg = case msg of UsernameExists -> "Username already in use" CheckPassword -> "Check password" UserCreated -> "User successfully created" AlreadySubscribed -> "You've already subscribed this feed" getMessages :: Controller [String] getMessages = do mMsg <- readParameter "msg" return $ case mMsg of Nothing -> [ ] Just msg -> [toMessage msg] withMessage :: Message -> Url -> Url withMessage msg url = concat [url, "?msg=", show msg] readParameter :: Read a => String -> Controller (Maybe a) readParameter param = fmap read <$> (optional $ S.look param)