module Buffet.Test.ParseArguments
  ( get
  ) where

import qualified Buffet.Ir.Ir as Ir
import qualified Buffet.Test.Configuration as Configuration
import qualified Buffet.Toolbox.ExceptionTools as ExceptionTools
import qualified Control.Exception as Exception
import qualified Data.Map.Strict as Map
import qualified Data.Text as T
import qualified Data.Yaml as Yaml
import Prelude (FilePath, IO, Show, ($), (.), maybe, mconcat, pure, show)

data Exception =
  Exception FilePath Yaml.ParseException

instance Show Exception where
  show (Exception path exception) =
    mconcat [path, ":\n", Yaml.prettyPrintParseException exception]

instance Exception.Exception Exception

get :: Configuration.Configuration -> IO (Map.Map Ir.Option T.Text)
get =
  maybe
    (pure Map.empty)
    (\file ->
       ExceptionTools.eitherThrow (Exception file) $ Yaml.decodeFileEither file) .
  Configuration.arguments