Dhall configuration

This commit is contained in:
Mats Rauhala 2018-08-02 23:07:05 +03:00
parent 6d08e9dad4
commit 7c08c46c16
9 changed files with 64 additions and 6 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
dist/
config/config.dhall

View File

@ -0,0 +1,8 @@
{
database = {
username = "username"
, password = "password"
, host = "hostname"
, database = "ebook"
}
}

10
config/devel.dhall Normal file
View File

@ -0,0 +1,10 @@
-- Devel configuration file, with defaults for local testing environment
-- pre-filled
{
database = {
username = "postgres"
, password = "devel"
, host = "localhost"
, database = "postgres"
}
}

9
docker-compose.yml Normal file
View File

@ -0,0 +1,9 @@
version: '2'
services:
postgres:
image: postgres:9.6.1
environment:
- POSTGRES_PASSWORD=devel
ports:
- "5432:5432"

View File

@ -18,8 +18,9 @@ cabal-version: >=1.10
executable ebook-manager
main-is: Main.hs
other-modules: Devel.Main
, Server
, API
, Configuration
, Server
, Types
-- other-extensions:
build-depends: base >=4.10 && <4.11
@ -45,5 +46,7 @@ executable ebook-manager
, dhall
, lucid
, servant-lucid
, lens
, generic-lens
hs-source-dirs: src
default-language: Haskell2010

19
src/Configuration.hs Normal file
View File

@ -0,0 +1,19 @@
{-# Language NoImplicitPrelude #-}
{-# Language DeriveGeneric #-}
{-# Language DuplicateRecordFields #-}
module Configuration where
import ClassyPrelude
import Dhall (Interpret)
data Pg = Pg { username :: Text
, password :: Text
, host :: Text
, database :: Text }
deriving (Show, Generic)
newtype Config = Config { database :: Pg } deriving (Show, Generic)
instance Interpret Pg
instance Interpret Config

View File

@ -1,3 +1,4 @@
{-# Language OverloadedStrings #-}
module Devel.Main where
import Main (defaultMain)
@ -6,6 +7,7 @@ import Control.Monad (void)
import Data.IORef (IORef, newIORef, readIORef, writeIORef)
import Foreign.Store (Store(..), lookupStore, readStore, storeAction, withStore)
import GHC.Word (Word32)
import Dhall (input, auto)
update :: IO ()
update = do
@ -23,7 +25,7 @@ update = do
withStore doneStore takeMVar
readStore doneStore >>= start
start :: MVar () -> IO ThreadId
start done = forkFinally defaultMain (\_ -> putMVar done ())
start done = forkFinally (input auto "./config/devel.dhall" >>= defaultMain) (\_ -> putMVar done ())
modifyStoredIORef :: Store (IORef a) -> (a -> IO a) -> IO ()
modifyStoredIORef store f = withStore store $ \ref -> do

View File

@ -1,11 +1,16 @@
{-# Language OverloadedStrings #-}
module Main where
import Server (server)
import Network.Wai.Handler.Warp (run)
import Types
import Configuration (Config)
import Dhall (input, auto)
defaultMain :: IO ()
defaultMain = run 8080 (server App)
defaultMain :: Config -> IO ()
defaultMain c = run 8080 (server (App c))
main :: IO ()
main = defaultMain
main = do
c <- input auto "./config/config.dhall"
defaultMain c

View File

@ -3,7 +3,8 @@ module Types where
import ClassyPrelude
import Control.Monad.Logger
import Configuration
data App = App
newtype App = App { config :: Config }
type AppM = LoggingT (ReaderT App IO)