cabal-gild-0.3.0.0: source/library/CabalGild/Action/GetCabalVersion.hs
module CabalGild.Action.GetCabalVersion where
import qualified CabalGild.Extra.Either as Either
import qualified CabalGild.Extra.FieldLine as FieldLine
import qualified CabalGild.Extra.Name as Name
import qualified CabalGild.Extra.String as String
import qualified Data.List as List
import qualified Data.Maybe as Maybe
import qualified Distribution.CabalSpecVersion as CabalSpecVersion
import qualified Distribution.FieldGrammar.Newtypes as Newtypes
import qualified Distribution.Fields as Fields
import qualified Distribution.Parsec as Parsec
fromFields :: [Fields.Field a] -> CabalSpecVersion.CabalSpecVersion
fromFields fs = Maybe.fromMaybe CabalSpecVersion.CabalSpecV1_0 $ do
f <- List.find isCabalVersion fs
fls <- getFieldLines f
Newtypes.getSpecVersion <$> fromFieldLines fls
isCabalVersion :: Fields.Field a -> Bool
isCabalVersion f = case f of
Fields.Field n _ -> Name.value n == String.toUtf8 "cabal-version"
Fields.Section {} -> False
getFieldLines :: Fields.Field a -> Maybe [Fields.FieldLine a]
getFieldLines f = case f of
Fields.Field _ fls -> Just fls
Fields.Section {} -> Nothing
fromFieldLines :: [Fields.FieldLine a] -> Maybe Newtypes.SpecVersion
fromFieldLines =
Either.hush
. Parsec.runParsecParser Parsec.parsec ""
. FieldLine.toFieldLineStream