]>
Commit | Line | Data |
---|---|---|
a9d77a20 FM |
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 |