Skip to content

Commit

Permalink
refactored get/put/delete/post to run on a StateT -> IO monad stack.
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Parker committed Jul 5, 2010
1 parent 6aa9680 commit 44b3ea6
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/Bird.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ module Bird(
, module Bird.Reply
, module Bird.Request
, module Bird.Reply.Codes
, module Bird.BirdRouter
) where

import Hack
import Data.Default
import Bird.Reply
import Bird.Request
import Bird.Reply.Codes
import Bird.BirdRouter
18 changes: 18 additions & 0 deletions src/Bird/BirdRouter.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module Bird.BirdRouter(
BirdRouter
, responseBody
) where

import Control.Monad.State
import Control.Monad.Reader
import Bird.Reply
import Bird.Request

type BirdRouter = StateT Reply IO

responseBody b = do
reply <- get
put $ reply { replyBody = b }

--responseStatus code reply = (reply { replyStatus = code }, ())
--param paramName request = lookup paramName $ params request
7 changes: 3 additions & 4 deletions src/Bird/Request.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,25 @@ import Rallod
import Text.ParserCombinators.Parsec
import Numeric
import Bird.Request.QueryStringParser
import qualified Data.Map as Hash

data Request =
Request {
verb :: RequestMethod,
path :: [String],
params :: Hash.Map String (Maybe String),
params :: [(String, Maybe String)],
protocol :: Hack_UrlScheme,
hackEnvironment :: Env
} deriving (Show)

instance Default Request where
def = Request { verb = GET, path = [], params = Hash.empty, protocol = HTTP, hackEnvironment = def }
def = Request { verb = GET, path = [], params = [], protocol = HTTP, hackEnvironment = def }

envToRequest :: Env -> Request
envToRequest e =
Request {
verb = requestMethod e,
path = split '/' $ pathInfo e,
params = Hash.fromList $ parseQueryString $ queryString e,
params = parseQueryString $ queryString e,
protocol = hackUrlScheme e,
hackEnvironment = e
}
Expand Down
1 change: 0 additions & 1 deletion src/Bird/Request/QueryStringParser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ keyValuePair = do
v <- optionMaybe (char '=' >> many valueCharacters)
return (k, v)


keyCharacters :: CharParser () Char
keyCharacters =
oneOf urlBaseChars
Expand Down

0 comments on commit 44b3ea6

Please sign in to comment.