module Web.Haskyapi.Config.Config (
domain,
subdomain,
db,
ip,
port,
) where
import qualified Data.Text as T
import Data.Maybe
import Data.Map ((!))
import Control.Arrow ((&&&))
import Control.Exception
import Web.Haskyapi.Header (Domain, SubDomain)
import Web.Haskyapi.Config.Defaults (defs)
import Web.Haskyapi.Config.Parser
parsedFile =
sparser "setting.yml" <$> readFile "setting.yml"
`catch` \(SomeException e) -> return []
slookup k [] = Nothing
slookup k (x:xs)
| k == key x = Just x
| otherwise = slookup k xs
aux def k fun =
parsedFile >>= \case
Left x -> return def
Right x -> return . maybe def fun $ slookup k x
subdomain :: IO SubDomain
subdomain = map (key &&& aval) <$> aux [] "subdomain" bval
domain :: IO Domain
domain = aux (defs ! "domain") "domain" aval
port = aux (defs ! "port") "port" aval
ip = aux (defs ! "ip") "ip" aval
db = T.pack <$> aux (defs ! "db") "db" aval
main = do
print =<< domain
print =<< ip
print =<< db
print =<< subdomain