summaryrefslogtreecommitdiff
path: root/fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord/Utils.hs
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