]> git.immae.eu Git - github/fretlink/edi-parser.git/blob - scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs
Release code as open source
[github/fretlink/edi-parser.git] / scaffolder / src / Text / Edifact / Scaffolder / Segments / Dependencies.hs
1 {-# LANGUAGE OverloadedStrings #-}
2
3 module Text.Edifact.Scaffolder.Segments.Dependencies
4 ( -- *
5 mkDependenciesHaddock
6 , mkDependenciesImports
7 , mkDependenciesReexports
8 ) where
9
10 import Text.Edifact.Scaffolder.Commons
11 import Text.Edifact.Scaffolder.Segments.Types
12
13 import Data.List.NonEmpty as NE (nonEmpty, toList)
14 import Data.Maybe (catMaybes, mapMaybe)
15 import Formatting as F
16
17 mkDependenciesReexports :: NonEmpty Element -> Scaffolding [Export]
18 mkDependenciesReexports = reexportDependencies fElementFunction
19
20 mkDependenciesImports :: NonEmpty Element -> Scaffolding [ImportGroup]
21 mkDependenciesImports elements =
22 let filterElements optic = mapMaybe optic . NE.toList
23 in maybe [] (pure . ImportGroup) . nonEmpty . catMaybes <$>
24 sequence
25 [ mkCompositeDependenciesImports (filterElements getComposite elements)
26 , mkSimpleDependenciesImports (filterElements getSimple elements)
27 ]
28
29 mkSimpleDependenciesImports :: [SimpleCode] -> Scaffolding (Maybe Import)
30 mkSimpleDependenciesImports =
31 ifNonEmpty (importDependencies "Simples" fSimpleParserFunction)
32
33 mkCompositeDependenciesImports :: [CompositeCode] -> Scaffolding (Maybe Import)
34 mkCompositeDependenciesImports =
35 ifNonEmpty (importDependencies "Composites" fCompositeParserFunction)
36
37 ifNonEmpty :: Applicative f => (NonEmpty input -> f output) -> [input] -> f (Maybe output)
38 ifNonEmpty f = traverse f . nonEmpty
39
40 mkDependenciesHaddock :: NonEmpty Element -> Scaffolding [Text]
41 mkDependenciesHaddock = haddockDependencies fElementFunction
42
43 fElementFunction :: Format r (Element -> r)
44 fElementFunction =
45 let buildElementFunction (Simple code _ _ _ _) = bprint fSimpleParserFunction code
46 buildElementFunction (Composite code _ _) = bprint fCompositeParserFunction code
47 in later buildElementFunction