module Proteome.Project( allProjects, currentProject, pathData, ) where import Control.Monad.IO.Class (MonadIO, liftIO) import Safe (atMay) import System.Directory (getCurrentDirectory, makeAbsolute) import System.FilePath (takeFileName, takeDirectory) import qualified Ribosome.Data.Ribo as Ribo (inspect) import Proteome.Data.Proteome (Proteome) import Proteome.Data.Project ( Project, ProjectName(..), ProjectRoot(..), ProjectType(..), ) import Proteome.Data.Env (Env(mainProject, projects, currentProjectIndex)) allProjects :: Proteome [Project] allProjects = do main <- Ribo.inspect mainProject extra <- Ribo.inspect projects return $ main : extra currentProject :: Proteome (Maybe Project) currentProject = do index <- Ribo.inspect currentProjectIndex pros <- allProjects return $ atMay pros index pathData :: MonadIO m => Maybe FilePath -> m (ProjectRoot, ProjectName, ProjectType) pathData override = do cwd <- liftIO $ maybe getCurrentDirectory pure override absMainDir <- liftIO $ makeAbsolute cwd return ( ProjectRoot absMainDir, ProjectName $ takeFileName absMainDir, ProjectType $ (takeFileName . takeDirectory) absMainDir )