]> git.immae.eu Git - github/fretlink/edi-parser.git/blob - scaffolder/src/Text/Edifact/Scaffolder/Commons/Types.hs
Release code as open source
[github/fretlink/edi-parser.git] / scaffolder / src / Text / Edifact / Scaffolder / Commons / Types.hs
1 {-# LANGUAGE DerivingStrategies #-}
2 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
3
4 module Text.Edifact.Scaffolder.Commons.Types
5 ( -- * Codes of elements
6 MessageCode(..)
7 , GroupCode(..)
8 , SegmentCode(..)
9 , SegmentName(..)
10 , CompositeCode (..)
11 , CompositeName (..)
12 , SimpleCode(..)
13 , SimpleName(..)
14 -- * Ordering of elements
15 , Position(..)
16 -- * Attributes
17 , Presence(..)
18 -- *
19 , ModuleName(..)
20 , (<.>)
21 -- *
22 , LanguageExtension(..)
23 -- *
24 , Scaffolding
25 , Revision(..)
26 , ScaffoldingEnv(..)
27 , disableDebugging
28 ) where
29
30 import Control.Monad.Reader (ReaderT)
31 import Data.String (IsString)
32
33 newtype MessageCode = MessageCode { getMessageCode :: String } deriving newtype (Show, Eq, Ord, IsString)
34 newtype GroupCode = GroupCode { getGroupCode :: String } deriving newtype (Show, Eq, Ord, IsString)
35 newtype SegmentCode = SegmentCode { getSegmentCode :: String } deriving newtype (Show, Eq, Ord, IsString)
36 newtype SegmentName = SegmentName { getSegmentName :: String } deriving newtype (Show, Eq, Ord, IsString)
37 newtype CompositeCode = CompositeCode { getCompositeCode :: String } deriving newtype (Show, Eq, Ord, IsString)
38 newtype CompositeName = CompositeName { getCompositeName :: String } deriving newtype (Show, Eq, Ord, IsString)
39 newtype SimpleCode = SimpleCode { getSimpleCode :: String } deriving newtype (Show, Eq, Ord, IsString)
40 newtype SimpleName = SimpleName { getSimpleName :: String } deriving newtype (Show, Eq, Ord, IsString)
41
42 newtype Position = Position { getPosition :: String } deriving newtype (Show, Eq, Ord, IsString)
43
44 data Presence = Mandatory
45 | Optional
46 deriving (Show, Eq, Ord)
47
48 newtype ModuleName = ModuleName { getModuleName :: String } deriving newtype (Show, Eq, IsString)
49
50 instance Semigroup ModuleName where
51 (<>) = (<.>)
52
53 (<.>) :: ModuleName -> ModuleName -> ModuleName
54 (ModuleName parent) <.> (ModuleName child) = ModuleName (parent <> "." <> child)
55
56 newtype LanguageExtension = LanguageExtension { getLanguageExtension :: String } deriving newtype IsString
57
58 type Scaffolding = ReaderT ScaffoldingEnv IO
59
60 newtype Revision = Revision { getRevision :: String } deriving newtype (Show, Eq, IsString)
61
62 data ScaffoldingEnv =
63 ScaffoldingEnv
64 { revision :: Revision
65 , hostModule :: ModuleName
66 , specificationsHome :: FilePath
67 , targetDirectory :: FilePath
68 , debugParsing :: Bool
69 }
70
71 disableDebugging :: ScaffoldingEnv -> ScaffoldingEnv
72 disableDebugging env = env { debugParsing = False }