on 2d313ac help sign in
35 lines 1.4 kB history raw
1module TutorialD.Interpreter.Import.TutorialD where
2import ProjectM36.Base
3import TutorialD.Interpreter.Import.Base
4import TutorialD.Interpreter.Base
5import TutorialD.Interpreter.DatabaseContextExpr
6import Text.Megaparsec.Text
7import Text.Megaparsec hiding (try)
8import ProjectM36.Error
9import qualified ProjectM36.Error as PM36E
10import qualified Data.Text as T
11import Control.Exception
12import qualified Data.ByteString as BS
13import qualified Data.Text.Encoding as TE
14--import a file containing TutorialD database context expressions
16importTutorialD :: FilePath -> IO (Either RelationalError DatabaseContextExpr)
17importTutorialD pathIn = do
18 eTutdBytes <- try (BS.readFile pathIn) :: IO (Either IOError BS.ByteString)
19 case eTutdBytes of
20 Left err -> return $ Left (ImportError $ T.pack (show err))
21 Right tutdBytes ->
22 case TE.decodeUtf8' tutdBytes of
23 Left err -> pure (Left (ImportError $ T.pack (show err)))
24 Right tutdUtf8 ->
25 case parse multipleDatabaseContextExprP "import" tutdUtf8 of
26 --parseErrorPretty is new in megaparsec 5
27 Left err -> pure (Left (PM36E.ParseError (T.pack (show err))))
28 Right expr -> pure (Right expr)
30tutdImportP :: Parser DatabaseContextDataImportOperator
31tutdImportP = do
32 reserved ":importtutd"
33 path <- quotedString
34 spaceConsumer
35 return $ DatabaseContextDataImportOperator (T.unpack path) importTutorialD