proteome-0.3.17.0: lib/Proteome/Project.hs
module Proteome.Project(
allProjects,
currentProject,
pathData,
) where
import Control.Monad.IO.Class (MonadIO, liftIO)
import Safe (atMay)
import System.Directory (makeAbsolute)
import System.FilePath (takeFileName, takeDirectory)
import qualified Ribosome.Control.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 => FilePath -> m (ProjectRoot, ProjectName, ProjectType)
pathData root = do
absMainDir <- liftIO $ makeAbsolute root
return (
ProjectRoot absMainDir,
ProjectName $ takeFileName absMainDir,
ProjectType $ (takeFileName . takeDirectory) absMainDir
)