{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE RecordWildCards #-} -- | module Config where import Conferer (DefaultConfig (configDef)) import Conferer.FromConfig import Conferer.FromConfig.Warp () import Data.ByteString (ByteString) import Data.Text (Text) import GHC.Generics (Generic) import Network.Wai.Handler.Warp (Settings) import URI.ByteString data UffdConfig = UffdConfig { uffdConfigUrl :: URIRef Absolute , uffdConfigClientSecret :: Text , uffdConfigClientName :: Text , uffdConfigEnable :: Bool } deriving (Generic, Show) data ServerConfig = ServerConfig { serverConfigWarp :: Settings , serverConfigDbString :: ByteString , serverConfigGtfs :: FilePath , serverConfigZoneinfoPath :: FilePath , serverConfigLogin :: UffdConfig } deriving (Generic) instance FromConfig ServerConfig instance DefaultConfig ServerConfig where configDef = ServerConfig { serverConfigWarp = configDef , serverConfigDbString = "" , serverConfigGtfs = "./gtfs.zip" , serverConfigZoneinfoPath = "/etc/zoneinfo/" , serverConfigLogin = configDef } instance DefaultConfig UffdConfig where configDef = UffdConfig uri "secret" "uffdclient" False where Right uri = parseURI strictURIParserOptions "http://www.example.org" instance FromConfig UffdConfig where fromConfig key config = do url <- fetchFromConfig (key /. "url") config let Right uffdConfigUrl = parseURI strictURIParserOptions url uffdConfigClientName <- fetchFromConfig (key /. "clientName") config uffdConfigClientSecret <- fetchFromConfig (key /. "clientSecret") config uffdConfigEnable <- fetchFromConfig (key /. "enable") config pure UffdConfig {..}