X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FUtils.hs;h=0fddc6d64127baf25a1e5adbe19b58b5e758d039;hb=d128bc12ae9f763c37941122bf2e163517810bba;hp=cb77474553c42fee4f6cdcaf340a32a8db4e38a9;hpb=35f9c2ec3c1e81e42737c54f3f1a8230427691c6;p=Rakka.git diff --git a/Rakka/Utils.hs b/Rakka/Utils.hs index cb77474..0fddc6d 100644 --- a/Rakka/Utils.hs +++ b/Rakka/Utils.hs @@ -1,13 +1,25 @@ module Rakka.Utils - ( parseYesOrNo + ( yesOrNo + , parseYesOrNo , maybeA - , defaultTo , deleteIfEmpty + , chomp + , guessMIMEType ) where import Control.Arrow import Control.Arrow.ArrowList +import qualified Data.ByteString.Lazy as Lazy (ByteString) +import qualified Data.ByteString.Lazy.Char8 as L8 hiding (ByteString) +import Magic +import Network.HTTP.Lucu +import System.IO.Unsafe + + +yesOrNo :: Bool -> String +yesOrNo True = "yes" +yesOrNo False = "no" parseYesOrNo :: ArrowChoice a => a String Bool @@ -26,15 +38,22 @@ maybeA a = listA a (x:_) -> returnA -< Just x -defaultTo :: ArrowChoice a => b -> a (Maybe b) b -defaultTo def - = proc m -> case m of - Nothing -> returnA -< def - Just x -> returnA -< x - - deleteIfEmpty :: (ArrowList a, ArrowChoice a) => a String String deleteIfEmpty = proc str -> do case str of "" -> none -< () - _ -> returnA -< str \ No newline at end of file + _ -> returnA -< str + + +chomp :: String -> String +chomp = reverse . snd . break (/= '\n') . reverse + + +guessMIMEType :: Lazy.ByteString -> MIMEType +guessMIMEType = read . unsafePerformIO . magicString magic . L8.unpack + where + magic :: Magic + magic = unsafePerformIO + $ do m <- magicOpen [MagicMime] + magicLoadDefault m + return m