{-# LANGUAGE OverloadedStrings #-}
module Web.Ivy.Types 
    (Handler(..)
    , Application)
    where
import Network.Wai
import Network.HTTP.Types

class Handler a where
    get, post, put, delete, handle :: a -> Application
    get _ = unimplemented
    post _ = unimplemented
    put _ = unimplemented
    delete _ = unimplemented

    handle a req = case requestMethod req of
        m | m == methodGet -> get a req
          | m == methodPost -> post a req
          | m == methodPut -> put a req
          | m == methodDelete -> delete a req
        otherwise -> unimplemented req

unimplemented :: Application
unimplemented _ = return $ responseLBS status501 [("Content-Type", "text/plain")] "not implemented method"