packages feed

hix-0.7.2: lib/Hix/Data/PackageId.hs

module Hix.Data.PackageId where

import Distribution.Package (PackageIdentifier (PackageIdentifier))
import Distribution.Pretty (Pretty (pretty))
import Distribution.Version (Version)
import Exon (exon)

import qualified Hix.Data.PackageName as PackageName
import Hix.Data.PackageName (PackageName (..))
import Hix.Pretty (prettyText, showP)

data PackageId =
  PackageId {
    name :: PackageName,
    version :: Version
  }
  deriving stock (Eq, Show, Ord, Generic)

renderPackage :: PackageId -> Text
renderPackage PackageId {..} =
  [exon|##{name}-#{showP version}|]

instance Pretty PackageId where
  pretty = prettyText . renderPackage

toCabal :: PackageId -> PackageIdentifier
toCabal PackageId {..} =
  PackageIdentifier (PackageName.toCabal name) version

fromCabal :: PackageIdentifier -> PackageId
fromCabal (PackageIdentifier (PackageName.fromCabal -> name) version) =
  PackageId {..}