proteome-0.9.9.9: lib/Proteome/Project.hs
module Proteome.Project where
import qualified Control.Lens as Lens (element, firstOf)
import Path (Abs, Dir, Path, dirname, parent)
import Proteome.Data.Env (Env)
import qualified Proteome.Data.Env as Env (currentProjectIndex, mainProject, projects)
import Proteome.Data.Project (Project)
import Proteome.Data.ProjectName (ProjectName (ProjectName))
import Proteome.Data.ProjectRoot (ProjectRoot (ProjectRoot))
import Proteome.Data.ProjectType (ProjectType (ProjectType))
import Proteome.Path (dropSlash)
allProjects ::
Member (AtomicState Env) r =>
Sem r [Project]
allProjects = do
main <- atomicGets Env.mainProject
extra <- atomicGets Env.projects
pure $ main : extra
currentProject ::
Member (AtomicState Env) r =>
Sem r (Maybe Project)
currentProject = do
index <- atomicGets Env.currentProjectIndex
Lens.firstOf (Lens.element index) <$> allProjects
pathData :: Path Abs Dir -> (ProjectRoot, ProjectName, ProjectType)
pathData root =
(
ProjectRoot root,
ProjectName . dropSlash . dirname $ root,
ProjectType . dropSlash . dirname . parent $ root
)