packages feed

clickhouse-migrate-0.1.0.0: src/ClickHouseMigrate/Internal/ExclusiveTypes.hs

{-# LANGUAGE ExistentialQuantification #-}

-- | Private acquisition and live-scope capability.
module ClickHouseMigrate.Internal.ExclusiveTypes where

import ClickHouseMigrate.Prelude
import ClickHouseMigrate.Target (TargetKey)
import Control.Exception (Exception)

data AccessError = InvalidAccessStrategy | AcquisitionTimedOut | AcquisitionFailed | AccessLost | AccessScopeClosed | AccessActionFailed | PredecessorQuiescenceRequired | AccessReleaseFailed | AccessReleaseTimedOut
  deriving stock (Eq, Ord, Show)

data AccessDescription = AccessDescription !Text !Text deriving stock (Eq, Show)

data ExclusiveAccess
  = forall lease. ExclusiveAccess
      !AccessDescription
      !Int
      !(TargetKey -> IO lease)
      !(lease -> IO ())
      !(lease -> IO Bool)

data Guard = Guard !AccessDescription !(IO (Either AccessError ()))

data AccessResult a = AccessResult !(Either AccessError a) ![AccessError]
  deriving stock (Eq, Show)

data AccessAcquisitionException = AccessAcquisitionException !AccessError deriving stock (Show)

instance Exception AccessAcquisitionException