packages feed

project-m36-0.2: src/bin/TutorialD/Interpreter/Import/TutorialD.hs

module TutorialD.Interpreter.Import.TutorialD where
import ProjectM36.Base
import TutorialD.Interpreter.Import.Base
import TutorialD.Interpreter.Base
import TutorialD.Interpreter.DatabaseContextExpr
import Text.Megaparsec.Text
import Text.Megaparsec hiding (try)
import ProjectM36.Error
import qualified ProjectM36.Error as PM36E
import qualified Data.Text as T
import Control.Exception
import qualified Data.Text.IO as TIO
--import a file containing TutorialD database context expressions

importTutorialD :: FilePath -> IO (Either RelationalError DatabaseContextExpr)
importTutorialD pathIn = do
  tutdData <- try (TIO.readFile pathIn) :: IO (Either IOError T.Text)
  case tutdData of 
    Left err -> return $ Left (ImportError $ T.pack (show err))
    Right tutdData' ->
      case parse multipleDatabaseContextExprP "import" tutdData' of
        --parseErrorPretty is new in megaparsec 5
        Left err -> pure (Left (PM36E.ParseError (T.pack (show err))))
        Right expr -> pure (Right expr)

tutdImportP :: Parser DatabaseContextDataImportOperator
tutdImportP = do
  reserved ":importtutd" 
  path <- quotedString
  spaceConsumer
  return $ DatabaseContextDataImportOperator (T.unpack path) importTutorialD