module Hix.Managed.Cabal.Source where

import Distribution.Client.Types (SourcePackageDb (SourcePackageDb, packageIndex))
import Distribution.PackageDescription (
  GenericPackageDescription (GenericPackageDescription, packageDescription),
  PackageDescription,
  )
import Distribution.Solver.Types.PackageIndex (lookupPackageId)
import Distribution.Solver.Types.SourcePackage (SourcePackage (SourcePackage, srcpkgDescription))

import qualified Hix.Data.PackageId as PackageId
import Hix.Data.PackageId (PackageId)

sourcePackage ::
  SourcePackageDb ->
  PackageId ->
  Maybe PackageDescription
sourcePackage :: SourcePackageDb -> PackageId -> Maybe PackageDescription
sourcePackage SourcePackageDb {PackageIndex UnresolvedSourcePackage
packageIndex :: SourcePackageDb -> PackageIndex UnresolvedSourcePackage
packageIndex :: PackageIndex UnresolvedSourcePackage
packageIndex} PackageId
package =
  PackageIndex UnresolvedSourcePackage
-> PackageIdentifier -> Maybe UnresolvedSourcePackage
forall pkg.
Package pkg =>
PackageIndex pkg -> PackageIdentifier -> Maybe pkg
lookupPackageId PackageIndex UnresolvedSourcePackage
packageIndex (PackageId -> PackageIdentifier
PackageId.toCabal PackageId
package) Maybe UnresolvedSourcePackage
-> (UnresolvedSourcePackage -> PackageDescription)
-> Maybe PackageDescription
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \case
    SourcePackage {srcpkgDescription :: forall loc. SourcePackage loc -> GenericPackageDescription
srcpkgDescription = GenericPackageDescription {PackageDescription
packageDescription :: GenericPackageDescription -> PackageDescription
packageDescription :: PackageDescription
packageDescription}} -> PackageDescription
packageDescription