diff options
Diffstat (limited to 'scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs')
-rw-r--r-- | scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs | 47 |
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 | |||
3 | module Text.Edifact.Scaffolder.Messages.Dependencies | ||
4 | ( -- * | ||
5 | mkDependenciesHaddock | ||
6 | , mkDependenciesImports | ||
7 | , mkDependenciesReexports | ||
8 | ) where | ||
9 | |||
10 | import Text.Edifact.Scaffolder.Commons | ||
11 | import Text.Edifact.Scaffolder.Messages.Types | ||
12 | |||
13 | import Control.Monad ((>=>)) | ||
14 | import Data.List (isPrefixOf) | ||
15 | import Data.List.NonEmpty as NE (nonEmpty, toList) | ||
16 | import Data.Maybe (mapMaybe) | ||
17 | |||
18 | unlessIsCommon :: SegmentCode -> Maybe SegmentCode | ||
19 | unlessIsCommon sc@(SegmentCode code) | "U" `isPrefixOf` code = Nothing | ||
20 | | otherwise = Just sc | ||
21 | |||
22 | mkDependenciesReexports :: NonEmpty Element -> Scaffolding [Export] | ||
23 | mkDependenciesReexports = mkSegmentDependencies mkSegmentDependenciesReexports | ||
24 | |||
25 | mkSegmentDependenciesReexports :: NonEmpty SegmentCode -> Scaffolding [Export] | ||
26 | mkSegmentDependenciesReexports = reexportDependencies fSegmentParserFunction | ||
27 | |||
28 | mkDependenciesImports :: NonEmpty Element -> Scaffolding [ImportGroup] | ||
29 | mkDependenciesImports = mkSegmentDependencies mkSegmentDependenciesImports | ||
30 | |||
31 | mkSegmentDependencies :: (NonEmpty SegmentCode -> Scaffolding [output]) | ||
32 | -> (NonEmpty Element -> Scaffolding [output]) | ||
33 | mkSegmentDependencies mk = maybe (pure []) mk . filterSegmentDependencies | ||
34 | |||
35 | filterSegmentDependencies :: NonEmpty Element -> Maybe (NonEmpty SegmentCode) | ||
36 | filterSegmentDependencies = | ||
37 | fmap nub . nonEmpty . mapMaybe (getSegment >=> unlessIsCommon) . NE.toList | ||
38 | |||
39 | mkSegmentDependenciesImports :: NonEmpty SegmentCode -> Scaffolding [ImportGroup] | ||
40 | mkSegmentDependenciesImports = | ||
41 | fmap (pure . singleImport) . importDependencies "Segments" fSegmentParserFunction | ||
42 | |||
43 | mkDependenciesHaddock :: NonEmpty Element -> Scaffolding [Text] | ||
44 | mkDependenciesHaddock = mkSegmentDependencies mkSegmentDependenciesHaddock | ||
45 | |||
46 | mkSegmentDependenciesHaddock :: NonEmpty SegmentCode -> Scaffolding [Text] | ||
47 | mkSegmentDependenciesHaddock = haddockDependencies fSegmentParserFunction | ||