module Database.EventStore.Internal.Subscription.Packages where
import Data.Int
import Data.ProtocolBuffers
import Data.Serialize
import Data.UUID
import Database.EventStore.Internal.Command
import Database.EventStore.Internal.Prelude
import Database.EventStore.Internal.Settings
import Database.EventStore.Internal.Subscription.Message
import Database.EventStore.Internal.Subscription.Types
import Database.EventStore.Internal.Types
createConnectRegularPackage :: Settings -> UUID -> Text -> Bool -> Package
createConnectRegularPackage Settings{..} uuid stream tos =
Package
{ packageCmd = subscribeToStreamCmd
, 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 = connectToPersistentSubscriptionCmd
, 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 _ -> createPersistentSubscriptionCmd
PersistUpdate _ -> updatePersistentSubscriptionCmd
PersistDelete -> deletePersistentSubscriptionCmd
createAckPackage :: Settings -> UUID -> Text -> [UUID] -> Package
createAckPackage Settings{..} corr sid eids =
Package
{ packageCmd = persistentSubscriptionAckEventsCmd
, 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 = persistentSubscriptionNakEventsCmd
, packageCorrelation = corr
, packageData = runPut $ encodeMessage msg
, packageCred = s_credentials
}
where
bytes = fmap (toStrict . toByteString) eids
msg = persistentSubscriptionNakEvents sid bytes txt act
createUnsubscribePackage :: UUID -> Package
createUnsubscribePackage uuid =
Package
{ packageCmd = unsubscribeFromStreamCmd
, packageCorrelation = uuid
, packageData = runPut $ encodeMessage UnsubscribeFromStream
, packageCred = Nothing
}