blob: 00d227d8dfa3c069e49365e049b9fbc418275764 (
plain)
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
|
{-# Language ApplicativeDo #-}
module Fig.Bridge.IRCDiscord.Utils
( FigBridgeIRCDiscordException(..)
, Config(..)
, loadConfig
) where
import Fig.Prelude
import qualified Toml
newtype FigBridgeIRCDiscordException = FigBridgeIRCDiscordException Text
deriving (Show, Eq, Ord)
instance Exception FigBridgeIRCDiscordException
newtype Config = Config
{ mapping :: [(Int, Text)]
} deriving (Show, Eq, Ord)
configCodec :: Toml.TomlCodec Config
configCodec = do
mapping <- Toml.list (Toml.pair (Toml.int "discord") (Toml.text "irc")) "mapping" Toml..= (\a -> a.mapping)
pure $ Config{..}
loadConfig :: FilePath -> IO Config
loadConfig path = Toml.decodeFileEither configCodec path >>= \case
Left err -> throwM . FigBridgeIRCDiscordException $ tshow err
Right config -> pure config
|