]> git.immae.eu Git - github/fretlink/edi-parser.git/blame - scaffolder/src/Text/Edifact/BundleReader/CodedSimples.hs
Release code as open source
[github/fretlink/edi-parser.git] / scaffolder / src / Text / Edifact / BundleReader / CodedSimples.hs
CommitLineData
a9d77a20
FM
1{-# LANGUAGE OverloadedStrings #-}
2
3module Text.Edifact.BundleReader.CodedSimples
4 ( readCodedSimples
5 ) where
6
7import Text.Edifact.BundleReader.Commons
8import Text.Edifact.BundleReader.Configuration (BundleReaderEnv (..))
9import Text.Edifact.BundleReader.Simples (simplesDirectory)
10import Text.Edifact.Scaffolder.Commons
11
12import Text.Edifact.Scaffolder.CodedSimples.Specification
13
14import Control.Monad (when)
15import Control.Monad.Reader (asks)
16import Data.ByteString as BS (ByteString,
17 readFile)
18import Formatting
19
20readCodedSimples :: [ByteString] -> [SimpleCode] -> BundleReader ()
21readCodedSimples contents simples = do
22 let parsedFile path = parseFile simples =<< liftIO (BS.readFile path)
23 parsedString = parseFile simples
24 files <- asks codedSimplesFiles
25 mapM_ parsedFile files
26 mapM_ parsedString contents
27
28parseFile :: [SimpleCode] -> ByteString -> BundleReader [SimpleCode]
29parseFile simples content =
30 let chunks = tail $ splitFileByDash 70 $ decodeContent content
31 in traverse (parseChunk simples) chunks
32
33parseChunk :: [SimpleCode] -> Text -> BundleReader SimpleCode
34parseChunk simples chunk = do
35 parsed <- parseOrFail chunk specificationParser
36 outputFile <- getOutputFile (fSimpleCodeLower % ".txt") simplesDirectory (fst parsed)
37 when (fst parsed `elem` simples) $ toFile chunk outputFile
38 pure $ fst parsed