{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE DuplicateRecordFields #-}

module HaskellWorks.CabalCache.Concurrent.Type
  ( DownloadQueue(..)
  , ConsumerId
  , ProviderId
  , PackageId
  ) where

import Data.Text                     (Text)
import GHC.Generics
import HaskellWorks.CabalCache.Types (PackageId)

import qualified Control.Concurrent.STM                as STM
import qualified Data.Map                              as M
import qualified Data.Set                              as S
import qualified Data.Text                             as T
import qualified HaskellWorks.CabalCache.Data.Relation as R

type ConsumerId = PackageId
type ProviderId = PackageId

data DownloadQueue = DownloadQueue
  { tDependencies :: STM.TVar (R.Relation ConsumerId ProviderId)
  , tUploading    :: STM.TVar (S.Set PackageId)
  , tFailures     :: STM.TVar (S.Set PackageId)
  } deriving Generic