module Staversion.Internal.Query
( PackageName,
Resolver,
PackageSource(..),
sourceDesc,
Query(..),
parseQuery,
ErrorMsg
) where
import Data.List (isSuffixOf)
import Data.Text (Text, pack)
type PackageName = Text
type Resolver = String
data PackageSource = SourceStackage Resolver
| SourceHackage
| SourceStackYaml FilePath
| SourceStackDefault
deriving (Show,Eq,Ord)
data Query = QueryName PackageName
| QueryCabalFile FilePath
| QueryStackYaml FilePath
| QueryStackYamlDefault
deriving (Show,Eq,Ord)
type ErrorMsg = String
sourceDesc :: PackageSource -> Text
sourceDesc (SourceStackage r) = pack r
sourceDesc SourceHackage = "latest in hackage"
sourceDesc (SourceStackYaml p) = pack p
sourceDesc SourceStackDefault = "default stack resolver"
parseQuery :: String -> Query
parseQuery s =
if s == "stack.yaml"
then QueryStackYamlDefault
else if "stack.yaml" `isSuffixOf` s
then QueryStackYaml s
else if ".cabal" `isSuffixOf` s
then QueryCabalFile s
else QueryName $ pack s