aboutsummaryrefslogtreecommitdiff
path: root/src/Config.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Config.hs')
-rw-r--r--src/Config.hs72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/Config.hs b/src/Config.hs
new file mode 100644
index 0000000..c09f69e
--- /dev/null
+++ b/src/Config.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Config
+ ( configUsage
+ , Config(..)
+ , getConfig
+ ) where
+
+import Data.Maybe (catMaybes)
+import Data.Map (Map)
+import qualified Data.Map as M
+import Data.Text (Text)
+import qualified Data.Text as T
+import qualified Data.Text.IO as T
+
+import Control.Monad (guard)
+
+import System.Directory (doesFileExist)
+
+import Model.URL
+
+configUsage :: Text
+configUsage =
+ T.intercalate
+ "\n"
+ [ T.concat
+ [ "Please provide an url for leboncoin in the file named: "
+ , T.pack configPath
+ ]
+ , "url = http://…"
+ ]
+
+configPath :: FilePath
+configPath = "conf"
+
+data Config = Config
+ { url :: URL
+ } deriving (Eq, Read, Show)
+
+getConfig :: IO (Maybe Config)
+getConfig = do
+ exists <- doesFileExist configPath
+ if exists
+ then
+ configFromFile <$> T.readFile configPath
+ else
+ return Nothing
+
+configFromFile :: Text -> Maybe Config
+configFromFile =
+ configFromMap
+ . M.fromList
+ . catMaybes
+ . map lineConfig
+ . filter (not . T.null)
+ . map T.strip
+ . T.lines
+
+configFromMap :: Map Text Text -> Maybe Config
+configFromMap map = do
+ url <- M.lookup "url" map
+ return $ Config { url = url }
+
+lineConfig :: Text -> Maybe (Text, Text)
+lineConfig line = do
+ (key, value) <- twoElementsList (map T.strip . T.splitOn "=" $ line)
+ guard (T.length key > 0)
+ return (key, value)
+
+twoElementsList :: [a] -> Maybe (a, a)
+twoElementsList [x, y] = Just (x, y)
+twoElementsLisst _ = Nothing