1 {-# LANGUAGE OverloadedStrings #-}
3 module Text.Edifact.Scaffolder.Messages.Dependencies
6 , mkDependenciesImports
7 , mkDependenciesReexports
10 import Text.Edifact.Scaffolder.Commons
11 import Text.Edifact.Scaffolder.Messages.Types
13 import Control.Monad ((>=>))
14 import Data.List (isPrefixOf)
15 import Data.List.NonEmpty as NE (nonEmpty, toList)
16 import Data.Maybe (mapMaybe)
18 unlessIsCommon :: SegmentCode -> Maybe SegmentCode
19 unlessIsCommon sc@(SegmentCode code) | "U" `isPrefixOf` code = Nothing
22 mkDependenciesReexports :: NonEmpty Element -> Scaffolding [Export]
23 mkDependenciesReexports = mkSegmentDependencies mkSegmentDependenciesReexports
25 mkSegmentDependenciesReexports :: NonEmpty SegmentCode -> Scaffolding [Export]
26 mkSegmentDependenciesReexports = reexportDependencies fSegmentParserFunction
28 mkDependenciesImports :: NonEmpty Element -> Scaffolding [ImportGroup]
29 mkDependenciesImports = mkSegmentDependencies mkSegmentDependenciesImports
31 mkSegmentDependencies :: (NonEmpty SegmentCode -> Scaffolding [output])
32 -> (NonEmpty Element -> Scaffolding [output])
33 mkSegmentDependencies mk = maybe (pure []) mk . filterSegmentDependencies
35 filterSegmentDependencies :: NonEmpty Element -> Maybe (NonEmpty SegmentCode)
36 filterSegmentDependencies =
37 fmap nub . nonEmpty . mapMaybe (getSegment >=> unlessIsCommon) . NE.toList
39 mkSegmentDependenciesImports :: NonEmpty SegmentCode -> Scaffolding [ImportGroup]
40 mkSegmentDependenciesImports =
41 fmap (pure . singleImport) . importDependencies "Segments" fSegmentParserFunction
43 mkDependenciesHaddock :: NonEmpty Element -> Scaffolding [Text]
44 mkDependenciesHaddock = mkSegmentDependencies mkSegmentDependenciesHaddock
46 mkSegmentDependenciesHaddock :: NonEmpty SegmentCode -> Scaffolding [Text]
47 mkSegmentDependenciesHaddock = haddockDependencies fSegmentParserFunction