{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
module Distribution.Types.GivenComponent (
  GivenComponent(..)
) where

import Distribution.Compat.Prelude

import Distribution.Types.ComponentId
import Distribution.Types.LibraryName
import Distribution.Types.PackageName

-- | A 'GivenComponent' represents a library depended on and explicitly
-- specified by the user/client with @--dependency@
--
-- It enables Cabal to know which 'ComponentId' to associate with a library
--
-- @since 2.3.0.0
data GivenComponent =
  GivenComponent
    { GivenComponent -> PackageName
givenComponentPackage :: PackageName
    , GivenComponent -> LibraryName
givenComponentName    :: LibraryName -- --dependency is for libraries
                                           -- only, not for any component
    , GivenComponent -> ComponentId
givenComponentId      :: ComponentId }
  deriving ((forall x. GivenComponent -> Rep GivenComponent x)
-> (forall x. Rep GivenComponent x -> GivenComponent)
-> Generic GivenComponent
forall x. Rep GivenComponent x -> GivenComponent
forall x. GivenComponent -> Rep GivenComponent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. GivenComponent -> Rep GivenComponent x
$cto :: forall x. Rep GivenComponent x -> GivenComponent
Generic, ReadPrec [GivenComponent]
ReadPrec GivenComponent
Int -> ReadS GivenComponent
ReadS [GivenComponent]
(Int -> ReadS GivenComponent)
-> ReadS [GivenComponent]
-> ReadPrec GivenComponent
-> ReadPrec [GivenComponent]
-> Read GivenComponent
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS GivenComponent
readsPrec :: Int -> ReadS GivenComponent
$creadList :: ReadS [GivenComponent]
readList :: ReadS [GivenComponent]
$creadPrec :: ReadPrec GivenComponent
readPrec :: ReadPrec GivenComponent
$creadListPrec :: ReadPrec [GivenComponent]
readListPrec :: ReadPrec [GivenComponent]
Read, Int -> GivenComponent -> ShowS
[GivenComponent] -> ShowS
GivenComponent -> String
(Int -> GivenComponent -> ShowS)
-> (GivenComponent -> String)
-> ([GivenComponent] -> ShowS)
-> Show GivenComponent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GivenComponent -> ShowS
showsPrec :: Int -> GivenComponent -> ShowS
$cshow :: GivenComponent -> String
show :: GivenComponent -> String
$cshowList :: [GivenComponent] -> ShowS
showList :: [GivenComponent] -> ShowS
Show, GivenComponent -> GivenComponent -> Bool
(GivenComponent -> GivenComponent -> Bool)
-> (GivenComponent -> GivenComponent -> Bool) -> Eq GivenComponent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GivenComponent -> GivenComponent -> Bool
== :: GivenComponent -> GivenComponent -> Bool
$c/= :: GivenComponent -> GivenComponent -> Bool
/= :: GivenComponent -> GivenComponent -> Bool
Eq, Typeable)

instance Binary GivenComponent
instance Structured GivenComponent