aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs')
-rw-r--r--scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs47
1 files changed, 47 insertions, 0 deletions
diff --git a/scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs b/scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs
new file mode 100644
index 0000000..acb9ea8
--- /dev/null
+++ b/scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs
@@ -0,0 +1,47 @@
1{-# LANGUAGE OverloadedStrings #-}
2
3module Text.Edifact.Scaffolder.Segments.Dependencies
4 ( -- *
5 mkDependenciesHaddock
6 , mkDependenciesImports
7 , mkDependenciesReexports
8 ) where
9
10import Text.Edifact.Scaffolder.Commons
11import Text.Edifact.Scaffolder.Segments.Types
12
13import Data.List.NonEmpty as NE (nonEmpty, toList)
14import Data.Maybe (catMaybes, mapMaybe)
15import Formatting as F
16
17mkDependenciesReexports :: NonEmpty Element -> Scaffolding [Export]
18mkDependenciesReexports = reexportDependencies fElementFunction
19
20mkDependenciesImports :: NonEmpty Element -> Scaffolding [ImportGroup]
21mkDependenciesImports 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
29mkSimpleDependenciesImports :: [SimpleCode] -> Scaffolding (Maybe Import)
30mkSimpleDependenciesImports =
31 ifNonEmpty (importDependencies "Simples" fSimpleParserFunction)
32
33mkCompositeDependenciesImports :: [CompositeCode] -> Scaffolding (Maybe Import)
34mkCompositeDependenciesImports =
35 ifNonEmpty (importDependencies "Composites" fCompositeParserFunction)
36
37ifNonEmpty :: Applicative f => (NonEmpty input -> f output) -> [input] -> f (Maybe output)
38ifNonEmpty f = traverse f . nonEmpty
39
40mkDependenciesHaddock :: NonEmpty Element -> Scaffolding [Text]
41mkDependenciesHaddock = haddockDependencies fElementFunction
42
43fElementFunction :: Format r (Element -> r)
44fElementFunction =
45 let buildElementFunction (Simple code _ _ _ _) = bprint fSimpleParserFunction code
46 buildElementFunction (Composite code _ _) = bprint fCompositeParserFunction code
47 in later buildElementFunction