aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs')
-rw-r--r--scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs47
1 files changed, 47 insertions, 0 deletions
diff --git a/scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs b/scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs
new file mode 100644
index 0000000..fbcc56b
--- /dev/null
+++ b/scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs
@@ -0,0 +1,47 @@
1{-# LANGUAGE OverloadedStrings #-}
2
3module Text.Edifact.Scaffolder.Messages.Dependencies
4 ( -- *
5 mkDependenciesHaddock
6 , mkDependenciesImports
7 , mkDependenciesReexports
8 ) where
9
10import Text.Edifact.Scaffolder.Commons
11import Text.Edifact.Scaffolder.Messages.Types
12
13import Control.Monad ((>=>))
14import Data.List (isPrefixOf)
15import Data.List.NonEmpty as NE (nonEmpty, toList)
16import Data.Maybe (mapMaybe)
17
18unlessIsCommon :: SegmentCode -> Maybe SegmentCode
19unlessIsCommon sc@(SegmentCode code) | "U" `isPrefixOf` code = Nothing
20 | otherwise = Just sc
21
22mkDependenciesReexports :: NonEmpty Element -> Scaffolding [Export]
23mkDependenciesReexports = mkSegmentDependencies mkSegmentDependenciesReexports
24
25mkSegmentDependenciesReexports :: NonEmpty SegmentCode -> Scaffolding [Export]
26mkSegmentDependenciesReexports = reexportDependencies fSegmentParserFunction
27
28mkDependenciesImports :: NonEmpty Element -> Scaffolding [ImportGroup]
29mkDependenciesImports = mkSegmentDependencies mkSegmentDependenciesImports
30
31mkSegmentDependencies :: (NonEmpty SegmentCode -> Scaffolding [output])
32 -> (NonEmpty Element -> Scaffolding [output])
33mkSegmentDependencies mk = maybe (pure []) mk . filterSegmentDependencies
34
35filterSegmentDependencies :: NonEmpty Element -> Maybe (NonEmpty SegmentCode)
36filterSegmentDependencies =
37 fmap nub . nonEmpty . mapMaybe (getSegment >=> unlessIsCommon) . NE.toList
38
39mkSegmentDependenciesImports :: NonEmpty SegmentCode -> Scaffolding [ImportGroup]
40mkSegmentDependenciesImports =
41 fmap (pure . singleImport) . importDependencies "Segments" fSegmentParserFunction
42
43mkDependenciesHaddock :: NonEmpty Element -> Scaffolding [Text]
44mkDependenciesHaddock = mkSegmentDependencies mkSegmentDependenciesHaddock
45
46mkSegmentDependenciesHaddock :: NonEmpty SegmentCode -> Scaffolding [Text]
47mkSegmentDependenciesHaddock = haddockDependencies fSegmentParserFunction