module Database.EventStore.Internal.Manager.Subscription.Packages where
import Data.Int
import ClassyPrelude
import Data.ProtocolBuffers
import Data.Serialize
import Data.UUID
import Database.EventStore.Internal.Manager.Subscription.Message
import Database.EventStore.Internal.Manager.Subscription.Model
import Database.EventStore.Internal.Types
createConnectRegularPackage :: Settings -> UUID -> Text -> Bool -> Package
createConnectRegularPackage Settings{..} uuid stream tos =
Package
{ packageCmd = 0xC0
, packageCorrelation = uuid
, packageData = runPut $ encodeMessage msg
, packageCred = s_credentials
}
where
msg = subscribeToStream stream tos
createConnectPersistPackage :: Settings
-> UUID
-> Text
-> Text
-> Int32
-> Package
createConnectPersistPackage Settings{..} uuid grp stream bufSize =
Package
{ packageCmd = 0xC5
, packageCorrelation = uuid
, packageData = runPut $ encodeMessage msg
, packageCred = s_credentials
}
where
msg = _connectToPersistentSubscription grp stream bufSize
createPersistActionPackage :: Settings
-> UUID
-> Text
-> Text
-> PersistAction
-> Package
createPersistActionPackage Settings{..} u grp strm tpe =
Package
{ packageCmd = cmd
, packageCorrelation = u
, packageData = runPut msg
, packageCred = s_credentials
}
where
msg =
case tpe of
PersistCreate sett ->
encodeMessage $ _createPersistentSubscription grp strm sett
PersistUpdate sett ->
encodeMessage $ _updatePersistentSubscription grp strm sett
PersistDelete ->
encodeMessage $ _deletePersistentSubscription grp strm
cmd =
case tpe of
PersistCreate _ -> 0xC8
PersistUpdate _ -> 0xCE
PersistDelete -> 0xCA
createAckPackage :: Settings -> UUID -> Text -> [UUID] -> Package
createAckPackage Settings{..} corr sid eids =
Package
{ packageCmd = 0xCC
, packageCorrelation = corr
, packageData = runPut $ encodeMessage msg
, packageCred = s_credentials
}
where
bytes = fmap (toStrict . toByteString) eids
msg = persistentSubscriptionAckEvents sid bytes
createNakPackage :: Settings
-> UUID
-> Text
-> NakAction
-> Maybe Text
-> [UUID]
-> Package
createNakPackage Settings{..} corr sid act txt eids =
Package
{ packageCmd = 0xCD
, packageCorrelation = corr
, packageData = runPut $ encodeMessage msg
, packageCred = s_credentials
}
where
bytes = fmap (toStrict . toByteString) eids
msg = persistentSubscriptionNakEvents sid bytes txt act
createUnsubscribePackage :: Settings -> UUID -> Package
createUnsubscribePackage Settings{..} uuid =
Package
{ packageCmd = 0xC3
, packageCorrelation = uuid
, packageData = runPut $ encodeMessage UnsubscribeFromStream
, packageCred = s_credentials
}