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