packages feed

ribosome-app-0.9.9.9: lib/Ribosome/App/ProjectNames.hs

module Ribosome.App.ProjectNames where

import Path (parseRelDir)

import Ribosome.App.Data (ModuleName (ModuleName), ProjectName (ProjectName), ProjectNames (..))
import Ribosome.Host.Text (pascalCase)

parse ::
  IsString err =>
  String ->
  Either err ProjectNames
parse raw = do
  let
    name = ProjectName (toText raw)
    modRaw = pascalCase raw
    moduleName = ModuleName (toText modRaw)
  nameDir <- maybe err pure (parseRelDir raw)
  moduleNameDir <- maybe err pure (parseRelDir modRaw)
  pure ProjectNames {..}
  where
    err =
      Left "The project name must be usable as a directory name"