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/ 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 executable ebook-manager
main-is: Main.hs main-is: Main.hs
other-modules: Devel.Main other-modules: Devel.Main
, Server
, API , API
, Configuration
, Server
, Types , Types
-- other-extensions: -- other-extensions:
build-depends: base >=4.10 && <4.11 build-depends: base >=4.10 && <4.11
@ -45,5 +46,7 @@ executable ebook-manager
, dhall , dhall
, lucid , lucid
, servant-lucid , servant-lucid
, lens
, generic-lens
hs-source-dirs: src hs-source-dirs: src
default-language: Haskell2010 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 module Devel.Main where
import Main (defaultMain) import Main (defaultMain)
@ -6,6 +7,7 @@ import Control.Monad (void)
import Data.IORef (IORef, newIORef, readIORef, writeIORef) import Data.IORef (IORef, newIORef, readIORef, writeIORef)
import Foreign.Store (Store(..), lookupStore, readStore, storeAction, withStore) import Foreign.Store (Store(..), lookupStore, readStore, storeAction, withStore)
import GHC.Word (Word32) import GHC.Word (Word32)
import Dhall (input, auto)
update :: IO () update :: IO ()
update = do update = do
@ -23,7 +25,7 @@ update = do
withStore doneStore takeMVar withStore doneStore takeMVar
readStore doneStore >>= start readStore doneStore >>= start
start :: MVar () -> IO ThreadId 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 (IORef a) -> (a -> IO a) -> IO ()
modifyStoredIORef store f = withStore store $ \ref -> do modifyStoredIORef store f = withStore store $ \ref -> do

View File

@ -1,11 +1,16 @@
{-# Language OverloadedStrings #-}
module Main where module Main where
import Server (server) import Server (server)
import Network.Wai.Handler.Warp (run) import Network.Wai.Handler.Warp (run)
import Types import Types
import Configuration (Config)
import Dhall (input, auto)
defaultMain :: IO () defaultMain :: Config -> IO ()
defaultMain = run 8080 (server App) defaultMain c = run 8080 (server (App c))
main :: IO () 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 ClassyPrelude
import Control.Monad.Logger import Control.Monad.Logger
import Configuration
data App = App newtype App = App { config :: Config }
type AppM = LoggingT (ReaderT App IO) type AppM = LoggingT (ReaderT App IO)