indigo-0.5.0: app/FileGen.hs
-- SPDX-FileCopyrightText: 2020 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ
-- | File Generation machinery that resembles @summoner@ library.
module FileGen
( run
) where
import System.Directory (setCurrentDirectory)
import Summoner.Tree (TreeFs(..), showBoldTree, traverseTree)
import qualified FileGen.Files as F
run :: Text -> IO ()
run projectName =
createProjectDirectoryCustom (CustomSettings projectName)
-- | From the given 'CustomSettings' creates the project.
createProjectDirectoryCustom :: CustomSettings -> IO ()
createProjectDirectoryCustom settings@CustomSettings{..} = do
let tree = createProjectTemplateCustom settings
traverseTree tree
putTextLn "The project with the following structure has been created:"
putTextLn $ showBoldTree tree
setCurrentDirectory (toString sProjectName)
-- | Creating tree structure of the project.
createProjectTemplateCustom :: CustomSettings -> TreeFs
createProjectTemplateCustom settings@CustomSettings{..} =
Dir (toString sProjectName) $ generateFiles settings
-- | Files Template
generateFiles :: CustomSettings -> [TreeFs]
generateFiles CustomSettings{..} =
[ Dir "app"
[ File "Main.hs" F.main ]
, Dir "src"
[ File "Basic.hs" F.basic ]
, Dir "test"
[ Dir "Test"
[ File "Basic.hs" F.basicTest ]
, File "Main.hs" F.mainTest
]
, File "ChangeLog.md" (F.changelog sProjectName)
, File "README.md" (F.readme sProjectName)
, File ".gitignore" F.gitignore
, File "package.yaml" (F.packageYaml sProjectName)
, File "stack.yaml" F.stackYaml
, File "indigo-snapshot.yaml" F.indigoSnapshotYaml
, File "indigo-dependence-snapshot.yaml" F.indigoDependenceSnapshotYaml
]
data CustomSettings = CustomSettings
{ sProjectName :: Text
}