module Buffet.Parse.ParseInternal ( get ) where import qualified Buffet.Ir.Ir as Ir import qualified Buffet.Parse.Menu as Menu import qualified Buffet.Parse.ParseDish as ParseDish import qualified Buffet.Parse.ParseMenu as ParseMenu import qualified Buffet.Toolbox.ExceptionTools as ExceptionTools import qualified Control.Exception as Exception import qualified Control.Monad as Monad import qualified Language.Docker as Docker import qualified Language.Docker.Parser as Parser import Prelude (FilePath, IO, Show, ($), (.), fmap, pure, show) newtype Exception = Exception Parser.Error instance Show Exception where show (Exception error) = Docker.errorBundlePretty error instance Exception.Exception Exception get :: FilePath -> IO Ir.Buffet get = ParseMenu.get Monad.>=> parseBuffet parseBuffet :: Menu.Menu -> IO Ir.Buffet parseBuffet menu = do optionToDish <- ExceptionTools.sequenceAccumulatingExceptions . fmap ParseDish.get $ Menu.optionToDish menu pure Ir.Buffet { Ir.copyDummySourcePath = Menu.copyDummySourcePath menu , Ir.optionToDish = optionToDish }