]> git.immae.eu Git - github/fretlink/edi-parser.git/blame - 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
CommitLineData
a9d77a20
FM
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