hack2-contrib 2011.10.12 → 2012.1.19
raw patch · 6 files changed
+22/−50 lines, 6 filesdep −enumeratordep ~hack2PVP ok
version bump matches the API change (PVP)
Dependencies removed: enumerator
Dependency ranges changed: hack2
API changes (from Hackage documentation)
- Hack2.Contrib.Utils: fromEnumerator :: Monad m => Enumerator ByteString m ByteString -> m ByteString
- Hack2.Contrib.Utils: toEnumerator :: Monad m => ByteString -> Enumerator ByteString m a
- Hack2.Contrib.Utils: withEnumerator :: Monad m => (ByteString -> ByteString) -> Enumerator ByteString m ByteString -> m (Enumerator ByteString m a)
- Hack2.Contrib.Response: set_body :: HackEnumerator -> Response -> Response
+ Hack2.Contrib.Response: set_body :: ByteString -> Response -> Response
- Hack2.Contrib.Utils: hack_input :: Env -> HackEnumerator
+ Hack2.Contrib.Utils: hack_input :: Env -> ByteString
Files
- hack2-contrib.cabal +2/−3
- src/Hack2/Contrib/Middleware/File.hs +7/−9
- src/Hack2/Contrib/Middleware/Head.hs +1/−2
- src/Hack2/Contrib/Request.hs +3/−4
- src/Hack2/Contrib/Response.hs +6/−12
- src/Hack2/Contrib/Utils.hs +3/−20
hack2-contrib.cabal view
@@ -1,5 +1,5 @@ Name: hack2-contrib-Version: 2011.10.12+Version: 2012.1.19 Build-type: Simple Synopsis: Hack2 contrib Description: Common middlewares and utilities that helps working with Hack2@@ -28,11 +28,10 @@ , data-default >= 0.2 , time , air >= 2011.6.19- , hack2 >= 2011.6.20+ , hack2 >= 2012.1.19 , utf8-string -- , ansi-wl-pprint , regexpr- , enumerator hs-source-dirs: src/
src/Hack2/Contrib/Middleware/File.hs view
@@ -20,9 +20,7 @@ import System.Directory import System.FilePath import qualified Data.ByteString.Char8 as B-import qualified Data.ByteString.Lazy.Char8 as Lazy import Data.ByteString.Char8 (ByteString)-import Data.Enumerator.Binary (enumFile) file :: Maybe ByteString -> Middleware@@ -63,7 +61,7 @@ serving path = do -- puts "serving path" - let file_enumerator = enumFile - b2u path+ file_data <- B.readFile path size <- path.b2u.file_size ^ from_i -- puts - "size is " + show size@@ -78,7 +76,7 @@ return - def - .set_body (HackEnumerator file_enumerator)+ .set_body_bytestring file_data .set_content_length size .set_content_type content_type .set_last_modified (B.pack mtime_str)@@ -91,27 +89,27 @@ def .set_status 404 .set_content_type _TextPlain- .set_content_length (msg.Lazy.length)+ .set_content_length (msg.B.length) .set_body_bytestring msg - where msg = "No permission: " + s2l path + "\n"+ where msg = "No permission: " + path + "\n" not_found :: ByteString -> IO Response not_found path = return $ def .set_status 404 .set_content_type _TextPlain- .set_content_length (msg.Lazy.length)+ .set_content_length (msg.B.length) .set_body_bytestring msg - where msg = "File not found: " + s2l path + "\n"+ where msg = "File not found: " + path + "\n" forbidden :: IO Response forbidden = return - def .set_status 403 .set_content_type _TextPlain- .set_content_length (msg.Lazy.length)+ .set_content_length (msg.B.length) .set_body_bytestring msg where msg = "Forbidden\n"
src/Hack2/Contrib/Middleware/Head.hs view
@@ -4,10 +4,9 @@ import Hack2.Contrib.Response import Hack2.Contrib.Utils -import Air.Env hiding (def, head)+import Air.Env hiding (head) import Prelude () import qualified Data.ByteString.Char8 as B-import Data.Default (def) head :: Middleware head app = \env -> do
src/Hack2/Contrib/Request.hs view
@@ -13,12 +13,11 @@ import Network.CGI.Protocol import Prelude () import qualified Data.ByteString.Char8 as B-import qualified Data.ByteString.Lazy.Char8 as Lazy import Hack2.Contrib.AirBackports -input_bytestring :: Env -> IO Lazy.ByteString-input_bytestring = hack_input > unHackEnumerator > fromEnumerator+input_bytestring :: Env -> IO ByteString+input_bytestring = hack_input > return scheme :: Env -> ByteString scheme = hack_url_scheme > show > lower > B.pack@@ -75,7 +74,7 @@ .map_fst (B.unpack > upper > gsub "-" "_") -- cgi env use all cap letters .map_snd B.unpack .(("REQUEST_METHOD", env.request_method.show) : ) -- for cgi request- .flip decodeInput _body+ .flip decodeInput (_body.s2l) .fst .concatMap to_headers
src/Hack2/Contrib/Response.hs view
@@ -8,16 +8,13 @@ import Hack2 import Hack2.Contrib.Constants import Hack2.Contrib.Utils-import Air.Env hiding (def)+import Air.Env import Prelude ()-import qualified Data.ByteString.Lazy.Char8 as Lazy import Hack2.Contrib.AirBackports-import Data.Default (def)-import Data.Enumerator (run_, enumList, Enumerator, ($$)) import qualified Data.ByteString.Char8 as Strict -body_bytestring :: Response -> IO Lazy.ByteString-body_bytestring r = r.body.unHackEnumerator.fromEnumerator+body_bytestring :: Response -> IO ByteString+body_bytestring = body > return redirect :: ByteString -> Maybe Int -> Response -> Response redirect target code = @@ -50,14 +47,11 @@ set_content_length :: (Integral a) => a -> Response -> Response set_content_length i r = r.set_header _ContentLength (i.show_bytestring) -set_body :: HackEnumerator -> Response -> Response+set_body :: ByteString -> Response -> Response set_body s r = r { body = s } -set_body_bytestring :: Lazy.ByteString -> Response -> Response-set_body_bytestring b r = - let enum = b.toEnumerator :: (forall a. Enumerator Strict.ByteString IO a)- in- set_body (HackEnumerator enum) r+set_body_bytestring :: ByteString -> Response -> Response+set_body_bytestring = set_body set_status :: Int -> Response -> Response set_status i r = r { status = i }
src/Hack2/Contrib/Utils.hs view
@@ -16,28 +16,11 @@ import Prelude () import System.Locale (defaultTimeLocale) import qualified Data.ByteString.Char8 as B-import qualified Data.ByteString.Lazy.Char8 as Lazy import qualified Data.Map as M import Hack2.Contrib.AirBackports import qualified Data.ByteString.Char8 as Strict -import qualified Data.Enumerator.Binary as EB-import qualified Data.Enumerator.List as EL--import Data.Enumerator (run_, enumList, Enumerator, ($$))--fromEnumerator :: Monad m => Enumerator Strict.ByteString m Lazy.ByteString -> m Lazy.ByteString-fromEnumerator m = run_ - m $$ EB.consume--toEnumerator :: Monad m => Lazy.ByteString -> Enumerator Strict.ByteString m a-toEnumerator = enumList 1 < Lazy.toChunks--withEnumerator :: Monad m => (Lazy.ByteString -> Lazy.ByteString) -> Enumerator Strict.ByteString m Lazy.ByteString -> m (Enumerator Strict.ByteString m a)-withEnumerator f enum = do- bytes <- fromEnumerator enum- return - toEnumerator - f bytes- empty_app :: Application empty_app = return def @@ -53,8 +36,8 @@ get :: (Eq a) => a -> [(a, b)] -> Maybe b get = lookup -bytesize :: Lazy.ByteString -> Int-bytesize = Lazy.length > from_i+bytesize :: ByteString -> Int+bytesize = B.length > from_i show_bytestring :: (Show a) => a -> ByteString show_bytestring = show > B.pack@@ -102,7 +85,7 @@ server_port :: Env -> Int hack_version :: Env -> (Int, Int, Int) hack_url_scheme :: Env -> HackUrlScheme-hack_input :: Env -> HackEnumerator+hack_input :: Env -> ByteString hack_errors :: Env -> HackErrors hack_headers :: Env -> [(ByteString, ByteString)]