packages feed

tianbar-0.3.2.0: src/System/Tianbar/UriOverride.hs

module System.Tianbar.UriOverride where

import Control.Monad

import Data.List.Split
import qualified Data.Map as M

import Network.URI

type UriOverride = String -> Maybe (IO String)

withScheme :: String -> (URI -> IO String) -> UriOverride
withScheme schemeMatch func uriStr
    | uriScheme uri == schemeMatch = Just $ func uri
    | otherwise = Nothing
    where (Just uri) = parseURI uriStr

mergeOverrides :: [UriOverride] -> UriOverride
mergeOverrides overrides = foldr mplus Nothing . flip map overrides . flip ($)

parseQuery :: URI -> M.Map String String
parseQuery = M.fromList
           . map ((\[a, b] -> (a, unEscapeString b)) . splitOn "=")
           . splitOn "&"
           . tail
           . uriQuery

returnContent :: String -> IO String
returnContent content = return $ "data:text/plain," ++ content