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 (Int -> PackageSource -> ShowS
[PackageSource] -> ShowS
PackageSource -> String
(Int -> PackageSource -> ShowS)
-> (PackageSource -> String)
-> ([PackageSource] -> ShowS)
-> Show PackageSource
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PackageSource] -> ShowS
$cshowList :: [PackageSource] -> ShowS
show :: PackageSource -> String
$cshow :: PackageSource -> String
showsPrec :: Int -> PackageSource -> ShowS
$cshowsPrec :: Int -> PackageSource -> ShowS
Show,PackageSource -> PackageSource -> Bool
(PackageSource -> PackageSource -> Bool)
-> (PackageSource -> PackageSource -> Bool) -> Eq PackageSource
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PackageSource -> PackageSource -> Bool
$c/= :: PackageSource -> PackageSource -> Bool
== :: PackageSource -> PackageSource -> Bool
$c== :: PackageSource -> PackageSource -> Bool
Eq,Eq PackageSource
Eq PackageSource
-> (PackageSource -> PackageSource -> Ordering)
-> (PackageSource -> PackageSource -> Bool)
-> (PackageSource -> PackageSource -> Bool)
-> (PackageSource -> PackageSource -> Bool)
-> (PackageSource -> PackageSource -> Bool)
-> (PackageSource -> PackageSource -> PackageSource)
-> (PackageSource -> PackageSource -> PackageSource)
-> Ord PackageSource
PackageSource -> PackageSource -> Bool
PackageSource -> PackageSource -> Ordering
PackageSource -> PackageSource -> PackageSource
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PackageSource -> PackageSource -> PackageSource
$cmin :: PackageSource -> PackageSource -> PackageSource
max :: PackageSource -> PackageSource -> PackageSource
$cmax :: PackageSource -> PackageSource -> PackageSource
>= :: PackageSource -> PackageSource -> Bool
$c>= :: PackageSource -> PackageSource -> Bool
> :: PackageSource -> PackageSource -> Bool
$c> :: PackageSource -> PackageSource -> Bool
<= :: PackageSource -> PackageSource -> Bool
$c<= :: PackageSource -> PackageSource -> Bool
< :: PackageSource -> PackageSource -> Bool
$c< :: PackageSource -> PackageSource -> Bool
compare :: PackageSource -> PackageSource -> Ordering
$ccompare :: PackageSource -> PackageSource -> Ordering
$cp1Ord :: Eq PackageSource
Ord)
data Query = QueryName PackageName
| QueryCabalFile FilePath
| QueryStackYaml FilePath
| QueryStackYamlDefault
deriving (Int -> Query -> ShowS
[Query] -> ShowS
Query -> String
(Int -> Query -> ShowS)
-> (Query -> String) -> ([Query] -> ShowS) -> Show Query
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Query] -> ShowS
$cshowList :: [Query] -> ShowS
show :: Query -> String
$cshow :: Query -> String
showsPrec :: Int -> Query -> ShowS
$cshowsPrec :: Int -> Query -> ShowS
Show,Query -> Query -> Bool
(Query -> Query -> Bool) -> (Query -> Query -> Bool) -> Eq Query
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Query -> Query -> Bool
$c/= :: Query -> Query -> Bool
== :: Query -> Query -> Bool
$c== :: Query -> Query -> Bool
Eq,Eq Query
Eq Query
-> (Query -> Query -> Ordering)
-> (Query -> Query -> Bool)
-> (Query -> Query -> Bool)
-> (Query -> Query -> Bool)
-> (Query -> Query -> Bool)
-> (Query -> Query -> Query)
-> (Query -> Query -> Query)
-> Ord Query
Query -> Query -> Bool
Query -> Query -> Ordering
Query -> Query -> Query
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Query -> Query -> Query
$cmin :: Query -> Query -> Query
max :: Query -> Query -> Query
$cmax :: Query -> Query -> Query
>= :: Query -> Query -> Bool
$c>= :: Query -> Query -> Bool
> :: Query -> Query -> Bool
$c> :: Query -> Query -> Bool
<= :: Query -> Query -> Bool
$c<= :: Query -> Query -> Bool
< :: Query -> Query -> Bool
$c< :: Query -> Query -> Bool
compare :: Query -> Query -> Ordering
$ccompare :: Query -> Query -> Ordering
$cp1Ord :: Eq Query
Ord)
type ErrorMsg = String
sourceDesc :: PackageSource -> Text
sourceDesc :: PackageSource -> Text
sourceDesc (SourceStackage String
r) = String -> Text
pack String
r
sourceDesc PackageSource
SourceHackage = Text
"latest in hackage"
sourceDesc (SourceStackYaml String
p) = String -> Text
pack String
p
sourceDesc PackageSource
SourceStackDefault = Text
"default stack resolver"
parseQuery :: String -> Query
parseQuery :: String -> Query
parseQuery String
s =
if String
s String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"stack.yaml"
then Query
QueryStackYamlDefault
else if String
"stack.yaml" String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isSuffixOf` String
s
then String -> Query
QueryStackYaml String
s
else if String
".cabal" String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isSuffixOf` String
s
then String -> Query
QueryCabalFile String
s
else Text -> Query
QueryName (Text -> Query) -> Text -> Query
forall a b. (a -> b) -> a -> b
$ String -> Text
pack String
s