diff options
author | Frédéric Menou <frederic.menou@fretlink.com> | 2016-12-08 10:19:15 +0200 |
---|---|---|
committer | Ismaël Bouya <ismael.bouya@fretlink.com> | 2022-05-17 18:01:51 +0200 |
commit | a9d77a20008efe82862cc1adbfa7a6d4f09f8ff7 (patch) | |
tree | adf3186fdccaeef19151026cdfbd38a530cf9ecb /scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs | |
download | edi-parser-a9d77a20008efe82862cc1adbfa7a6d4f09f8ff7.tar.gz edi-parser-a9d77a20008efe82862cc1adbfa7a6d4f09f8ff7.tar.zst edi-parser-a9d77a20008efe82862cc1adbfa7a6d4f09f8ff7.zip |
Diffstat (limited to 'scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs')
-rw-r--r-- | scaffolder/src/Text/Edifact/Scaffolder/Segments/Dependencies.hs | 47 |
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 | |||
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 | ||