{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module OpenAPI.Generate.Doc
( typeAliasModule,
emptyDoc,
appendDoc,
generateHaddockComment,
escapeText,
breakOnTokens,
reformatRecord,
reformatADT,
sideComments,
zipCodeAndComments,
sideBySide,
addOperationsModuleHeader,
addSecuritySchemesModuleHeader,
addConfigurationModuleHeader,
createModuleHeaderWithReexports,
addModelModuleHeader,
)
where
import qualified Control.Applicative as Applicative
import Data.Text (Text)
import qualified Data.Text as T
import Language.Haskell.TH.PprLib hiding ((<>))
typeAliasModule :: String
typeAliasModule :: String
typeAliasModule = String
"TypeAlias"
emptyDoc :: (Applicative f) => f Doc
emptyDoc :: forall (f :: * -> *). Applicative f => f (PprM Doc)
emptyDoc = PprM Doc -> f (PprM Doc)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PprM Doc
empty
haddockIntro :: Doc
haddockIntro :: PprM Doc
haddockIntro = String -> PprM Doc
text String
"-- |"
haddockLine :: Doc
haddockLine :: PprM Doc
haddockLine = String -> PprM Doc
text String
"--"
textToDoc :: Text -> Doc
textToDoc :: Text -> PprM Doc
textToDoc = String -> PprM Doc
text (String -> PprM Doc) -> (Text -> String) -> Text -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack
line :: String -> Doc -> Doc
line :: String -> PprM Doc -> PprM Doc
line = PprM Doc -> PprM Doc -> PprM Doc
($$) (PprM Doc -> PprM Doc -> PprM Doc)
-> (String -> PprM Doc) -> String -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc
text
emptyLine :: Doc -> Doc
emptyLine :: PprM Doc -> PprM Doc
emptyLine = String -> PprM Doc -> PprM Doc
line String
""
languageExtension :: String -> Doc -> Doc
languageExtension :: String -> PprM Doc -> PprM Doc
languageExtension = String -> PprM Doc -> PprM Doc
line (String -> PprM Doc -> PprM Doc)
-> (String -> String) -> String -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"{-# LANGUAGE " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" #-}")
importQualified :: String -> Doc -> Doc
importQualified :: String -> PprM Doc -> PprM Doc
importQualified = String -> PprM Doc -> PprM Doc
importUnqualified (String -> PprM Doc -> PprM Doc)
-> (String -> String) -> String -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"qualified " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>)
importUnqualified :: String -> Doc -> Doc
importUnqualified :: String -> PprM Doc -> PprM Doc
importUnqualified = String -> PprM Doc -> PprM Doc
line (String -> PprM Doc -> PprM Doc)
-> (String -> String) -> String -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"import " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>)
moduleDescription :: String -> Doc -> Doc
moduleDescription :: String -> PprM Doc -> PprM Doc
moduleDescription = String -> PprM Doc -> PprM Doc
line (String -> PprM Doc -> PprM Doc)
-> (String -> String) -> String -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"-- | " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>)
moduleDeclaration :: String -> String -> Doc -> Doc
moduleDeclaration :: String -> String -> PprM Doc -> PprM Doc
moduleDeclaration String
modulePrefix String
name = String -> PprM Doc -> PprM Doc
line (String
"module " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
modulePrefix String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"." String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
name String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" where")
generatorNote :: Doc -> Doc
generatorNote :: PprM Doc -> PprM Doc
generatorNote = String -> PprM Doc -> PprM Doc
line String
"-- CHANGE WITH CAUTION: This is a generated code file generated by https://github.com/Haskell-OpenAPI-Code-Generator/Haskell-OpenAPI-Client-Code-Generator." (PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
appendDoc :: (Applicative f) => f Doc -> f Doc -> f Doc
appendDoc :: forall (f :: * -> *).
Applicative f =>
f (PprM Doc) -> f (PprM Doc) -> f (PprM Doc)
appendDoc = (PprM Doc -> PprM Doc -> PprM Doc)
-> f (PprM Doc) -> f (PprM Doc) -> f (PprM Doc)
forall a b c. (a -> b -> c) -> f a -> f b -> f c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
Applicative.liftA2 PprM Doc -> PprM Doc -> PprM Doc
($$)
generateHaddockComment :: [Text] -> Doc
=
[Text] -> PprM Doc
generateHaddockCommentWithoutNewlines
([Text] -> PprM Doc) -> ([Text] -> [Text]) -> [Text] -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ( [Text] -> (Text -> [Text]) -> [Text]
forall a b. [a] -> (a -> [b]) -> [b]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
( \case
[] -> [Text
""]
[Text]
x -> [Text]
x
)
([Text] -> [Text]) -> (Text -> [Text]) -> Text -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
T.lines
)
generateHaddockCommentWithoutNewlines :: [Text] -> Doc
[] = PprM Doc
empty
generateHaddockCommentWithoutNewlines [Text
x] = PprM Doc
haddockIntro PprM Doc -> PprM Doc -> PprM Doc
<+> Text -> PprM Doc
textToDoc Text
x
generateHaddockCommentWithoutNewlines [Text]
xs =
[Text] -> PprM Doc
generateHaddockCommentWithoutNewlines ([Text] -> [Text]
forall a. HasCallStack => [a] -> [a]
init [Text]
xs)
PprM Doc -> PprM Doc -> PprM Doc
$$ PprM Doc
haddockLine
PprM Doc -> PprM Doc -> PprM Doc
<+> Text -> PprM Doc
textToDoc ([Text] -> Text
forall a. HasCallStack => [a] -> a
last [Text]
xs)
escapeText :: Text -> Text
escapeText :: Text -> Text
escapeText =
HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"'" Text
"\\'"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"\"" Text
"\\\""
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"`" Text
"\\`"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"@" Text
"\\@"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"$" Text
"\\$"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"#" Text
"\\#"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"<" Text
"\\<"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"/" Text
"\\/"
(Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"\\" Text
"\\\\"
breakOnTokens :: [Text] -> Doc -> Doc
breakOnTokens :: [Text] -> PprM Doc -> PprM Doc
breakOnTokens = (Text -> Text) -> [Text] -> PprM Doc -> PprM Doc
breakOnTokensWithReplacement (Text
"\n " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>)
breakOnTokensWithReplacement :: (Text -> Text) -> [Text] -> Doc -> Doc
breakOnTokensWithReplacement :: (Text -> Text) -> [Text] -> PprM Doc -> PprM Doc
breakOnTokensWithReplacement Text -> Text
replaceFn [Text]
tokens =
let addLineBreaks :: Text -> Text
addLineBreaks = (Text -> (Text -> Text) -> Text -> Text)
-> (Text -> Text) -> [Text] -> Text -> Text
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\Text
token Text -> Text
f -> HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
token (Text -> Text
replaceFn Text
token) (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
f) Text -> Text
forall a. a -> a
id [Text]
tokens
in String -> PprM Doc
text
(String -> PprM Doc)
-> (PprM Doc -> String) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack
(Text -> String) -> (PprM Doc -> Text) -> PprM Doc -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> Text
T.unlines
([Text] -> Text) -> (PprM Doc -> [Text]) -> PprM Doc -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Text) -> [Text] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Text
T.stripEnd
([Text] -> [Text]) -> (PprM Doc -> [Text]) -> PprM Doc -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
T.lines
(Text -> [Text]) -> (PprM Doc -> Text) -> PprM Doc -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
addLineBreaks
(Text -> Text) -> (PprM Doc -> Text) -> PprM Doc -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"\n" Text
""
(Text -> Text) -> (PprM Doc -> Text) -> PprM Doc -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
removeDuplicateSpaces
(Text -> Text) -> (PprM Doc -> Text) -> PprM Doc -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack
(String -> Text) -> (PprM Doc -> String) -> PprM Doc -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> String
forall a. Show a => a -> String
show
reformatRecord :: Doc -> Doc
reformatRecord :: PprM Doc -> PprM Doc
reformatRecord =
(Text -> Text) -> [Text] -> PprM Doc -> PprM Doc
breakOnTokensWithReplacement
( \case
Text
"{" -> Text
"{\n "
Text
token -> Text
"\n " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
token
)
[Text
",", Text
"{", Text
"}"]
reformatADT :: Doc -> Doc
reformatADT :: PprM Doc -> PprM Doc
reformatADT =
(Text -> Text) -> [Text] -> PprM Doc -> PprM Doc
breakOnTokensWithReplacement
( \case
Text
"=" -> Text
"=\n "
Text
token -> Text
"\n " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
token
)
[Text
"=", Text
"deriving", Text
"|"]
removeDuplicateSpaces :: Text -> Text
removeDuplicateSpaces :: Text -> Text
removeDuplicateSpaces Text
t =
let t' :: Text
t' = HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
" " Text
" " Text
t
in if Text
t Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
t' then Text
t' else Text -> Text
removeDuplicateSpaces Text
t'
sideComments :: [Text] -> Doc
= [PprM Doc] -> PprM Doc
vcat ([PprM Doc] -> PprM Doc)
-> ([Text] -> [PprM Doc]) -> [Text] -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> PprM Doc) -> [Text] -> [PprM Doc]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> PprM Doc
text (String -> PprM Doc) -> (Text -> String) -> Text -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> String) -> (Text -> Text) -> Text -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"\n" Text
" " (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text
"-- ^ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>))
zipCodeAndComments :: [Text] -> [Text] -> Doc
zipCodeAndComments :: [Text] -> [Text] -> PprM Doc
zipCodeAndComments [] [Text]
_ = PprM Doc
empty
zipCodeAndComments [Text
x] [Text]
_ = Text -> PprM Doc
textToDoc Text
x
zipCodeAndComments (Text
x : [Text]
xs) [] = Text -> PprM Doc
textToDoc Text
x PprM Doc -> PprM Doc -> PprM Doc
$$ [Text] -> [Text] -> PprM Doc
zipCodeAndComments [Text]
xs []
zipCodeAndComments (Text
x : [Text]
xs) (Text
y : [Text]
ys) = Text -> PprM Doc
textToDoc Text
x PprM Doc -> PprM Doc -> PprM Doc
$$ Int -> PprM Doc -> PprM Doc
nest Int
2 ([Text] -> PprM Doc
generateHaddockComment [Text
y]) PprM Doc -> PprM Doc -> PprM Doc
$$ [Text] -> [Text] -> PprM Doc
zipCodeAndComments [Text]
xs [Text]
ys
sideBySide :: Doc -> Doc -> Doc
sideBySide :: PprM Doc -> PprM Doc -> PprM Doc
sideBySide PprM Doc
leftDoc PprM Doc
rightDoc =
let splitDoc :: PprM Doc -> [PprM Doc]
splitDoc = (String -> PprM Doc) -> [String] -> [PprM Doc]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\String
l -> if String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
l then PprM Doc
empty else String -> PprM Doc
text String
l) ([String] -> [PprM Doc])
-> (PprM Doc -> [String]) -> PprM Doc -> [PprM Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
lines (String -> [String])
-> (PprM Doc -> String) -> PprM Doc -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> String
forall a. Show a => a -> String
show
([PprM Doc]
leftDoc', [PprM Doc]
rightDoc') = case (PprM Doc -> [PprM Doc]
splitDoc PprM Doc
leftDoc, PprM Doc -> [PprM Doc]
splitDoc PprM Doc
rightDoc) of
([PprM Doc]
l, [PprM Doc]
r) | [PprM Doc] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [PprM Doc]
l Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< [PprM Doc] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [PprM Doc]
r -> ([PprM Doc]
l [PprM Doc] -> [PprM Doc] -> [PprM Doc]
forall a. Semigroup a => a -> a -> a
<> PprM Doc -> [PprM Doc]
forall a. a -> [a]
repeat PprM Doc
empty, [PprM Doc]
r)
([PprM Doc]
l, [PprM Doc]
r) -> ([PprM Doc]
l, [PprM Doc]
r [PprM Doc] -> [PprM Doc] -> [PprM Doc]
forall a. Semigroup a => a -> a -> a
<> PprM Doc -> [PprM Doc]
forall a. a -> [a]
repeat PprM Doc
empty)
in (PprM Doc -> PprM Doc -> PprM Doc)
-> PprM Doc -> [PprM Doc] -> PprM Doc
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl PprM Doc -> PprM Doc -> PprM Doc
($$) PprM Doc
empty ([PprM Doc] -> PprM Doc) -> [PprM Doc] -> PprM Doc
forall a b. (a -> b) -> a -> b
$
(PprM Doc -> PprM Doc -> PprM Doc)
-> [PprM Doc] -> [PprM Doc] -> [PprM Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\PprM Doc
l PprM Doc
r -> if String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (PprM Doc -> String
forall a. Show a => a -> String
show PprM Doc
l) Bool -> Bool -> Bool
&& String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (PprM Doc -> String
forall a. Show a => a -> String
show PprM Doc
r) then String -> PprM Doc
text String
"" else PprM Doc
l PprM Doc -> PprM Doc -> PprM Doc
<+> PprM Doc
r) [PprM Doc]
leftDoc' [PprM Doc]
rightDoc'
addOperationsModuleHeader :: String -> String -> String -> Doc -> Doc
String
mainModuleName String
moduleName String
operationId =
PprM Doc -> PprM Doc
generatorNote
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"OverloadedStrings"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"ExplicitForAll"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"MultiWayIf"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
moduleDescription (String
"Contains the different functions to run the operation " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
operationId)
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> PprM Doc -> PprM Doc
moduleDeclaration (String
mainModuleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".Operations") String
moduleName
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Prelude as GHC.Integer.Type"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Prelude as GHC.Maybe"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Control.Monad.Fail"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Control.Monad.Trans.Reader"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Encoding.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types.FromJSON"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types.ToJSON"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.ByteString"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.ByteString as Data.ByteString.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.ByteString as Data.ByteString.Internal.Type"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Either"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Foldable"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Functor"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Maybe"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Scientific"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text as Data.Text.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Time.Calendar as Data.Time.Calendar.Days"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Time.LocalTime as Data.Time.LocalTime.Internal.ZonedTime"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Vector"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Base"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Classes"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Int"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Show"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Types"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Client"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Client as Network.HTTP.Client.Request"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Client as Network.HTTP.Client.Types"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Simple"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Types"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Types as Network.HTTP.Types.Status"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Types as Network.HTTP.Types.URI"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified (String
mainModuleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".Common")
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importUnqualified (String
mainModuleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".Types")
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
addModelModuleHeader :: String -> String -> [String] -> String -> Doc -> Doc
String
mainModuleName String
moduleName [String]
modelModulesToImport String
description =
PprM Doc -> PprM Doc
generatorNote
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"OverloadedStrings"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"MultiWayIf"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
moduleDescription String
description
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> PprM Doc -> PprM Doc
moduleDeclaration String
mainModuleName String
moduleName
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Prelude as GHC.Integer.Type"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Prelude as GHC.Maybe"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Control.Monad.Fail"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Encoding.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types.FromJSON"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types.ToJSON"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Aeson as Data.Aeson.Types.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.ByteString"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.ByteString as Data.ByteString.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Foldable"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Functor"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Maybe"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Scientific"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text as Data.Text.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Time.Calendar as Data.Time.Calendar.Days"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Time.LocalTime as Data.Time.LocalTime.Internal.ZonedTime"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Base"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Classes"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Int"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Show"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Types"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified (String
mainModuleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".Common")
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (if String
moduleName String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
typeAliasModule then PprM Doc -> PprM Doc
forall a. a -> a
id else String -> PprM Doc -> PprM Doc
importUnqualified (String
mainModuleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"." String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
typeAliasModule))
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([PprM Doc] -> PprM Doc
vcat ((String -> PprM Doc) -> [String] -> [PprM Doc]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> PprM Doc
text (String -> PprM Doc) -> (String -> String) -> String -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"import {-# SOURCE #-} " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((String
mainModuleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".") String -> String -> String
forall a. Semigroup a => a -> a -> a
<>)) [String]
modelModulesToImport) PprM Doc -> PprM Doc -> PprM Doc
$$)
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
addSecuritySchemesModuleHeader :: String -> Doc -> Doc
String
moduleName =
PprM Doc -> PprM Doc
generatorNote
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"OverloadedStrings"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
moduleDescription String
"Contains all supported security schemes defined in the specification"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> PprM Doc -> PprM Doc
moduleDeclaration String
moduleName String
"SecuritySchemes"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text as Data.Text.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Base"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Classes"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Show"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Client as Network.HTTP.Client.Request"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Network.HTTP.Simple"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified (String
moduleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".Common")
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
addConfigurationModuleHeader :: String -> Doc -> Doc
String
moduleName =
PprM Doc -> PprM Doc
generatorNote
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
languageExtension String
"OverloadedStrings"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
moduleDescription String
"Contains the default configuration"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> PprM Doc -> PprM Doc
moduleDeclaration String
moduleName String
"Configuration"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"Data.Text as Data.Text.Internal"
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified String
"GHC.Types "
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PprM Doc -> PprM Doc
importQualified (String
moduleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".Common")
(PprM Doc -> PprM Doc)
-> (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PprM Doc -> PprM Doc
emptyLine
createModuleHeaderWithReexports :: String -> [String] -> String -> Doc
String
moduleName [String]
modulesToExport String
description =
let exports :: PprM Doc
exports = [PprM Doc] -> PprM Doc
vcat ([PprM Doc] -> PprM Doc) -> [PprM Doc] -> PprM Doc
forall a b. (a -> b) -> a -> b
$ (String -> PprM Doc) -> [String] -> [PprM Doc]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> PprM Doc
text (String -> PprM Doc) -> (String -> String) -> String -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"module " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
",")) [String]
modulesToExport
imports :: PprM Doc
imports = [PprM Doc] -> PprM Doc
vcat ([PprM Doc] -> PprM Doc) -> [PprM Doc] -> PprM Doc
forall a b. (a -> b) -> a -> b
$ (String -> PprM Doc) -> [String] -> [PprM Doc]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> PprM Doc
text (String -> PprM Doc) -> (String -> String) -> String -> PprM Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"import " String -> String -> String
forall a. Semigroup a => a -> a -> a
<>)) [String]
modulesToExport
in PprM Doc -> PprM Doc
generatorNote (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall a b. (a -> b) -> a -> b
$
String -> PprM Doc -> PprM Doc
moduleDescription String
description (PprM Doc -> PprM Doc) -> PprM Doc -> PprM Doc
forall a b. (a -> b) -> a -> b
$
String -> PprM Doc
text (String
"module " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
moduleName String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" (")
PprM Doc -> PprM Doc -> PprM Doc
$$ Int -> PprM Doc -> PprM Doc
nest
Int
2
( PprM Doc
exports
PprM Doc -> PprM Doc -> PprM Doc
$$ String -> PprM Doc
text String
") where"
)
PprM Doc -> PprM Doc -> PprM Doc
$$ String -> PprM Doc
text String
""
PprM Doc -> PprM Doc -> PprM Doc
$$ PprM Doc
imports