-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConfig.purs
69 lines (58 loc) · 1.92 KB
/
Config.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
module Worker.Config where
import Data.Maybe
import Pathy
import Protolude
import Control.Monad.Error.Class (throwError)
import Data.NonEmpty (NonEmpty(..))
import Data.String.NonEmpty (NonEmptyString)
import Data.String.NonEmpty as NonEmptyString
import Effect (Effect)
import Effect.Console (log)
import Env as Env
import Node.Express.App as Express
import Node.Express.Response as Express
import Options.Applicative as Options.Applicative
import Worker.Config.FromCli as Worker.Config.FromCli
import Worker.Config.FromEnv as Worker.Config.FromEnv
type TransportConfig_NodemailerReal =
{ pass :: String
, user :: String
}
type TransportConfig_Websocket =
{ url :: String
}
data TransportConfig
= TransportConfig__NodemailerReal TransportConfig_NodemailerReal
| TransportConfig__NodemailerTest
-- from args
type Config =
{ transportConfig :: TransportConfig
, databaseName :: String
, databaseHost :: String
, databasePort :: Maybe Int
, databaseOwnerPassword :: String
}
config :: Effect Config
config = do
cliConfig <- Options.Applicative.execParser Worker.Config.FromCli.opts
envConfig <- Worker.Config.FromEnv.envConfig
(transportConfig :: TransportConfig) <-
case cliConfig.transportType of
Worker.Config.FromCli.TransportConfigType__NodemailerReal ->
maybe
(throwError $ error "invalid TransportConfig__NodemailerReal")
(pure <<< TransportConfig__NodemailerReal)
( { pass: _
, user: _
}
<$> envConfig.nodemailerRealPass
<*> envConfig.nodemailerRealUser
)
Worker.Config.FromCli.TransportConfigType__NodemailerTest -> pure TransportConfig__NodemailerTest
pure
{ transportConfig
, databaseName: cliConfig.databaseName
, databaseHost: cliConfig.databaseHost
, databasePort: cliConfig.databasePort
, databaseOwnerPassword: envConfig.databaseOwnerPassword
}