hash-addressed-cli-2.0.0.0: library/HashAddressed/App/Meta/Initialization.hs
module HashAddressed.App.Meta.Initialization
(
defaultConfigINI, tryInitializeStore, initializeStore,
InitializationType (..),
)
where
import Essentials
import HashAddressed.App.HashFunction.Naming
import HashAddressed.App.Meta.Paths
import HashAddressed.App.Verbosity.Printing
import HashAddressed.App.Verbosity.Type
import HashAddressed.App.Command.Type
import Control.Monad.IO.Class (liftIO)
import HashAddressed.HashFunction (HashFunction)
import Prelude (FilePath)
import qualified Data.ByteString as Strict.ByteString
import qualified Data.Ini as INI
import qualified Data.Text as Strict.Text
import qualified Data.Text.Encoding as Strict.Text
import qualified System.Directory as Directory
defaultConfigINI :: HashFunction -> INI.Ini
defaultConfigINI optHashFunction = INI.Ini mempty
[ (Strict.Text.pack "version", Strict.Text.pack "1")
, (Strict.Text.pack "hash function",
Strict.Text.pack (showHashFunction optHashFunction))]
tryInitializeStore :: InitializationType -> Verbosity -> HashFunction -> FilePath -> CommandAction ()
tryInitializeStore initializationType optVerbosity optHashFunction optStoreDirectory = do
liftIO (Directory.doesPathExist (metaDirectory optStoreDirectory)) >>= \case
False -> initializeStore optHashFunction optStoreDirectory
True -> case initializationType of
CreateNew -> initializeStore optHashFunction optStoreDirectory
CreateIfNotPresent ->
putVerboseLn optVerbosity "Store is already initialized."
data InitializationType = CreateNew | CreateIfNotPresent
{-| Assumes a store does not already exist -}
initializeStore :: HashFunction -> FilePath -> CommandAction ()
initializeStore optHashFunction optStoreDirectory = do
liftIO $ Directory.createDirectoryIfMissing True (metaDirectory optStoreDirectory)
liftIO $ Strict.ByteString.writeFile (configFile optStoreDirectory) $
Strict.Text.encodeUtf8 (INI.printIni (defaultConfigINI optHashFunction))