{-# LANGUAGE OverloadedStrings #-} module Config where import Data.Aeson ((.:), (.:?), decode, FromJSON(..), Value(..)) import Control.Applicative import qualified Data.ByteString.Lazy.Char8 as B data Config = Config { ignore :: Maybe [String] } deriving (Show) instance FromJSON Config where parseJSON (Object v) = Config <$> (v .: "ignore") -- | Parses config json as string to the Config type -- -- >>> config "{\"ignore\": [] }" -- Just (Config {ignore = Just []}) -- -- >>> config "{\"ignore\": [\"Foo.hs\"] }" -- Just (Config {ignore = Just ["Foo.hs"]}) -- -- >>> config "{\"ignore\": [1,2,3] }" -- Nothing -- config :: String -> Maybe Config config json = decode (B.pack json) :: Maybe Config