hix-0.7.0: lib/Hix/Data/PackageName.hs
module Hix.Data.PackageName where
import Data.Aeson (FromJSON, FromJSONKey, ToJSON, ToJSONKey)
import qualified Data.Set as Set
import qualified Distribution.Package as Cabal
import Distribution.Package (depPkgName, mkPackageName)
import Distribution.Pretty (Pretty (pretty))
import Distribution.Types.Dependency (Dependency)
import Hix.Class.EncodeNix (EncodeNixKey)
import Hix.Pretty (prettyText)
newtype PackageName =
PackageName Text
deriving stock (Eq, Show, Generic)
deriving newtype (IsString, Ord, FromJSON, FromJSONKey, ToJSON, ToJSONKey, EncodeNixKey)
instance Pretty PackageName where
pretty (PackageName n) = prettyText n
fromCabal :: Cabal.PackageName -> PackageName
fromCabal =
fromString . Cabal.unPackageName
toCabal :: PackageName -> Cabal.PackageName
toCabal (PackageName name) =
mkPackageName (toString name)
depPackageName :: Dependency -> PackageName
depPackageName =
fromCabal . depPkgName
newtype LocalPackage =
LocalPackage PackageName
deriving stock (Eq, Show, Generic)
deriving newtype (IsString, Ord, FromJSON, FromJSONKey, Pretty, EncodeNixKey)
localPackageName :: LocalPackage -> PackageName
localPackageName = coerce
localPackageNames :: [LocalPackage] -> [PackageName]
localPackageNames = coerce
sameLocalPackage :: LocalPackage -> PackageName -> Bool
sameLocalPackage (LocalPackage lp) p = lp == p
isLocalPackage :: Set LocalPackage -> PackageName -> Bool
isLocalPackage lps p = Set.member (LocalPackage p) lps
toLocalPackage :: Set LocalPackage -> PackageName -> Maybe LocalPackage
toLocalPackage lps p
| isLocalPackage lps p
= Just (LocalPackage p)
| otherwise
= Nothing