aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/BundleReader.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scaffolder/src/Text/Edifact/BundleReader.hs')
-rw-r--r--scaffolder/src/Text/Edifact/BundleReader.hs59
1 files changed, 59 insertions, 0 deletions
diff --git a/scaffolder/src/Text/Edifact/BundleReader.hs b/scaffolder/src/Text/Edifact/BundleReader.hs
new file mode 100644
index 0000000..7a15199
--- /dev/null
+++ b/scaffolder/src/Text/Edifact/BundleReader.hs
@@ -0,0 +1,59 @@
1module Text.Edifact.BundleReader
2 ( readBundle
3 , BundleReaderEnv(..)
4 ) where
5
6import Text.Edifact.BundleReader.Commons (BundleReader,
7 getSpecificationHome,
8 runBundleReader)
9import Text.Edifact.BundleReader.Composites (compositesDirectory,
10 readComposites)
11import Text.Edifact.BundleReader.Configuration
12import Text.Edifact.BundleReader.Extractor (FileContents (..),
13 readZip)
14import Text.Edifact.BundleReader.Messages (messagesDirectory,
15 readMessages)
16import Text.Edifact.BundleReader.Segments (readSegments,
17 segmentsDirectory)
18import Text.Edifact.BundleReader.CodedSimples (readCodedSimples)
19import Text.Edifact.BundleReader.Simples (readSimples,
20 simplesDirectory)
21
22import Control.Monad.IO.Class (liftIO)
23import Control.Monad.Reader (asks)
24import Data.Foldable (traverse_)
25import System.Directory (createDirectoryIfMissing)
26import System.FilePath ((</>))
27
28readBundle :: BundleReaderEnv -> IO ()
29readBundle = runBundleReader (setupDirectories >> readAll)
30
31readAll :: BundleReader ()
32readAll = do
33 revision <- asks parserRevision
34 bundles <- mapM (liftIO . readZip revision) =<< asks bundle
35 messages' <- readMessages (concatMap messages bundles)
36 printContent messages' "Messages with segments codes:"
37 segments' <- readSegments (concatMap segments bundles) $ concatMap snd messages'
38 printContent segments' "Segments with composites/simples:"
39 simples' <- readSimples (concatMap simples bundles) =<< readComposites (concatMap composites bundles) segments'
40 readCodedSimples (concatMap codedSimples bundles) simples'
41 printContent simples' "Simples:"
42 pure ()
43
44printContent :: Show a => a -> String -> BundleReader ()
45printContent content header = liftIO $ putStrLn header >> print content >> putStrLn ""
46
47setupDirectories :: BundleReader ()
48setupDirectories = do
49 home <- getSpecificationHome
50 let mkdir d = liftIO (createDirectoryIfMissing True (home </> d))
51 traverse_ mkdir directories
52
53directories :: [FilePath]
54directories =
55 [ compositesDirectory
56 , messagesDirectory
57 , segmentsDirectory
58 , simplesDirectory
59 ]