spacecookie-0.2.0.1: server/Config.hs
{-# LANGUAGE OverloadedStrings #-}
module Config
( Config (..)
) where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
import Data.Aeson
import Data.Aeson.Types
import Data.ByteString (ByteString ())
import qualified Data.ByteString as B
import Network.Gopher.Util
data Config = Config { serverName :: ByteString
, serverPort :: Integer
, runUserName :: String
, rootDirectory :: FilePath
}
instance FromJSON Config where
parseJSON (Object v) = Config <$>
v .: "hostname" <*>
v .: "port" <*>
v .: "user" <*>
v .: "root"
parseJSON _ = mzero
instance ToJSON Config where
toJSON (Config host port user root) = object
[ "hostname" .= host
, "port" .= port
, "user" .= user
, "root" .= root
]
-- auxiliary instances for types that have no default instance
instance FromJSON ByteString where
parseJSON (String s) = uEncode <$> (parseJSON (String s))
parseJSON _ = mzero
instance ToJSON ByteString where
toJSON = toJSON . uDecode