]> git.immae.eu Git - github/fretlink/edi-parser.git/blob - scaffolder/src/Text/Edifact/Scaffolder/Messages/Dependencies.hs
Release code as open source
[github/fretlink/edi-parser.git] / scaffolder / src / Text / Edifact / Scaffolder / Messages / Dependencies.hs
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