{-# LANGUAGE OverloadedStrings, MultiParamTypeClasses #-}
module Web.Ivy.Types 
    (Handler(..)
     )
    where
import Snap.Types

class MonadSnap m => Handler m a where
    get, post, put, delete, handle :: a -> m ()
    get _ = unimplemented
    post _ = unimplemented
    put _ = unimplemented
    delete _ = unimplemented

    handle a = getRequest >>= \req -> case rqMethod req of
        m | m == GET -> get a
          | m == POST -> post a
          | m == PUT -> put a
          | m == DELETE -> delete a
        otherwise -> unimplemented

unimplemented :: MonadSnap m => m ()
unimplemented = writeBS "not implemented method"