elm-street-0.1.0.0: generate-elm/Main.hs
{-# LANGUAGE TypeApplications #-}
{- | Generates Elm types from Haskell @types@ internal library.
The generated files can be found in the @elm-example/src@ folder.
-}
module Main (main) where
import Data.Text (Text)
import Elm (defaultSettings, generateElm)
import System.Directory (createDirectoryIfMissing)
import System.FilePath ((</>))
import Types (Types)
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
main :: IO ()
main = do
-- Generate Types, Encoders, Decoders
generateElm @Types $ defaultSettings "frontend/src" ["Core"]
-- Generate JSON string in Elm files for testing purposes
golden <- TIO.readFile "test/golden/oneType.json"
generateGoldenType golden
{- |
1. Reads the JSON file created for testing: @test/golden/oneType.json@
2. Creates Elm module with the function that is the string of the read content.
This file can be found at @frontend/tests/Tests/Golden.elm@.
-}
generateGoldenType :: Text -> IO ()
generateGoldenType c = do
let path = "frontend/tests/Tests"
createDirectoryIfMissing True path
TIO.writeFile (path </> "Golden.elm") golden
where
golden :: Text
golden = T.unlines $
[ "module Tests.Golden exposing (goldenOneTypeJson)"
, ""
, "goldenOneTypeJson : String"
, "goldenOneTypeJson ="
] ++ map (" " <>)
( "\"\"\"" : T.lines c ++ [ "\"\"\"" ]
)