TProxy + udpspeeder + udp2raw
{-# LANGUAGE OverloadedStrings #-}

module ConfigParserUtils (getYamlConfigEntry) where

import ConfigParser (ConfigEntry, parseConfigFile)
import Data.List (find)
import Data.Maybe (listToMaybe)
import ConfigParser (ConfigEntry, parseConfigFile, name)  -- add `name`

import qualified Data.Text as T

-- | Parse YAML file and return either:
--   * The entry matching the given name, or
--   * The first entry if no name is provided
getYamlConfigEntry :: FilePath          -- ^ YAML config file path
                   -> Maybe String      -- ^ Optional name
                   -> IO (Either String ConfigEntry)
getYamlConfigEntry file mName = do
  parseResult <- parseConfigFile file
  case parseResult of
    Left err -> pure $ Left err
    Right cfg -> case mName of
      Just cfgNameStr -> case find (\e -> T.unpack (name e) == cfgNameStr) cfg of
                     Just entry -> pure $ Right entry
                     Nothing -> pure $ Left $ "No config entry named: " ++ cfgNameStr
      Nothing -> case listToMaybe cfg of
                   Just entry -> pure $ Right entry
                   Nothing -> pure $ Left "YAML config is empty"