Files
galaxy-game/pkg/transcoder/notification.go
T
2026-05-07 00:58:53 +03:00

631 lines
24 KiB
Go

package transcoder
import (
"fmt"
commonfbs "galaxy/schema/fbs/common"
notificationfbs "galaxy/schema/fbs/notification"
flatbuffers "github.com/google/flatbuffers/go"
"github.com/google/uuid"
)
// LobbyInviteReceivedEvent is the Go-side payload for the
// `lobby.invite.received` catalog kind.
type LobbyInviteReceivedEvent struct {
GameID uuid.UUID
InviterUserID uuid.UUID
}
// LobbyInviteRevokedEvent is the Go-side payload for the
// `lobby.invite.revoked` catalog kind.
type LobbyInviteRevokedEvent struct {
GameID uuid.UUID
}
// LobbyApplicationSubmittedEvent is the Go-side payload for the
// `lobby.application.submitted` catalog kind.
type LobbyApplicationSubmittedEvent struct {
GameID uuid.UUID
ApplicationID uuid.UUID
}
// LobbyApplicationApprovedEvent is the Go-side payload for the
// `lobby.application.approved` catalog kind.
type LobbyApplicationApprovedEvent struct {
GameID uuid.UUID
}
// LobbyApplicationRejectedEvent is the Go-side payload for the
// `lobby.application.rejected` catalog kind.
type LobbyApplicationRejectedEvent struct {
GameID uuid.UUID
}
// LobbyMembershipRemovedEvent is the Go-side payload for the
// `lobby.membership.removed` catalog kind. Reason carries the
// upstream lifecycle event that triggered the cascade
// (`permanent_blocked`, `deleted`).
type LobbyMembershipRemovedEvent struct {
Reason string
}
// LobbyMembershipBlockedEvent is the Go-side payload for the
// `lobby.membership.blocked` catalog kind.
type LobbyMembershipBlockedEvent struct {
GameID uuid.UUID
Reason string
}
// LobbyRaceNameRegisteredEvent is the Go-side payload for the
// `lobby.race_name.registered` catalog kind.
type LobbyRaceNameRegisteredEvent struct {
RaceName string
}
// LobbyRaceNamePendingEvent is the Go-side payload for the
// `lobby.race_name.pending` catalog kind. ExpiresAt is an RFC 3339
// timestamp matching the producer in
// `backend/internal/lobby/runtime_hooks.go`.
type LobbyRaceNamePendingEvent struct {
RaceName string
ExpiresAt string
}
// LobbyRaceNameExpiredEvent is the Go-side payload for the
// `lobby.race_name.expired` catalog kind.
type LobbyRaceNameExpiredEvent struct {
RaceName string
}
// RuntimeImagePullFailedEvent is the Go-side payload for the
// `runtime.image_pull_failed` catalog kind (admin recipient).
type RuntimeImagePullFailedEvent struct {
GameID uuid.UUID
ImageRef string
}
// RuntimeContainerStartFailedEvent is the Go-side payload for the
// `runtime.container_start_failed` catalog kind (admin recipient).
type RuntimeContainerStartFailedEvent struct {
GameID uuid.UUID
}
// RuntimeStartConfigInvalidEvent is the Go-side payload for the
// `runtime.start_config_invalid` catalog kind (admin recipient).
type RuntimeStartConfigInvalidEvent struct {
GameID uuid.UUID
Reason string
}
// LobbyInviteReceivedEventToPayload encodes the event into the FlatBuffers
// bytes published on the gateway client event stream.
func LobbyInviteReceivedEventToPayload(event *LobbyInviteReceivedEvent) ([]byte, error) {
const op = "encode lobby invite received payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
if event.InviterUserID == uuid.Nil {
return nil, fmt.Errorf("%s: inviter_user_id is empty", op)
}
builder := flatbuffers.NewBuilder(64)
notificationfbs.LobbyInviteReceivedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.LobbyInviteReceivedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
hi, lo = uuidToHiLo(event.InviterUserID)
notificationfbs.LobbyInviteReceivedEventAddInviterUserId(builder, commonfbs.CreateUUID(builder, hi, lo))
offset := notificationfbs.LobbyInviteReceivedEventEnd(builder)
notificationfbs.FinishLobbyInviteReceivedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyInviteReceivedEvent decodes FlatBuffers bytes into a
// LobbyInviteReceivedEvent.
func PayloadToLobbyInviteReceivedEvent(data []byte) (result *LobbyInviteReceivedEvent, err error) {
const op = "decode lobby invite received payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyInviteReceivedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
inviter := flat.InviterUserId(nil)
if inviter == nil {
return nil, fmt.Errorf("%s: inviter_user_id is missing", op)
}
return &LobbyInviteReceivedEvent{
GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo()),
InviterUserID: uuidFromHiLo(inviter.Hi(), inviter.Lo()),
}, nil
}
// LobbyInviteRevokedEventToPayload encodes the event into the FlatBuffers
// bytes published on the gateway client event stream.
func LobbyInviteRevokedEventToPayload(event *LobbyInviteRevokedEvent) ([]byte, error) {
const op = "encode lobby invite revoked payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(48)
notificationfbs.LobbyInviteRevokedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.LobbyInviteRevokedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
offset := notificationfbs.LobbyInviteRevokedEventEnd(builder)
notificationfbs.FinishLobbyInviteRevokedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyInviteRevokedEvent decodes FlatBuffers bytes into a
// LobbyInviteRevokedEvent.
func PayloadToLobbyInviteRevokedEvent(data []byte) (result *LobbyInviteRevokedEvent, err error) {
const op = "decode lobby invite revoked payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyInviteRevokedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &LobbyInviteRevokedEvent{GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo())}, nil
}
// LobbyApplicationSubmittedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyApplicationSubmittedEventToPayload(event *LobbyApplicationSubmittedEvent) ([]byte, error) {
const op = "encode lobby application submitted payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
if event.ApplicationID == uuid.Nil {
return nil, fmt.Errorf("%s: application_id is empty", op)
}
builder := flatbuffers.NewBuilder(64)
notificationfbs.LobbyApplicationSubmittedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.LobbyApplicationSubmittedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
hi, lo = uuidToHiLo(event.ApplicationID)
notificationfbs.LobbyApplicationSubmittedEventAddApplicationId(builder, commonfbs.CreateUUID(builder, hi, lo))
offset := notificationfbs.LobbyApplicationSubmittedEventEnd(builder)
notificationfbs.FinishLobbyApplicationSubmittedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyApplicationSubmittedEvent decodes FlatBuffers bytes
// into a LobbyApplicationSubmittedEvent.
func PayloadToLobbyApplicationSubmittedEvent(data []byte) (result *LobbyApplicationSubmittedEvent, err error) {
const op = "decode lobby application submitted payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyApplicationSubmittedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
appID := flat.ApplicationId(nil)
if appID == nil {
return nil, fmt.Errorf("%s: application_id is missing", op)
}
return &LobbyApplicationSubmittedEvent{
GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo()),
ApplicationID: uuidFromHiLo(appID.Hi(), appID.Lo()),
}, nil
}
// LobbyApplicationApprovedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyApplicationApprovedEventToPayload(event *LobbyApplicationApprovedEvent) ([]byte, error) {
const op = "encode lobby application approved payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(48)
notificationfbs.LobbyApplicationApprovedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.LobbyApplicationApprovedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
offset := notificationfbs.LobbyApplicationApprovedEventEnd(builder)
notificationfbs.FinishLobbyApplicationApprovedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyApplicationApprovedEvent decodes FlatBuffers bytes
// into a LobbyApplicationApprovedEvent.
func PayloadToLobbyApplicationApprovedEvent(data []byte) (result *LobbyApplicationApprovedEvent, err error) {
const op = "decode lobby application approved payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyApplicationApprovedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &LobbyApplicationApprovedEvent{GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo())}, nil
}
// LobbyApplicationRejectedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyApplicationRejectedEventToPayload(event *LobbyApplicationRejectedEvent) ([]byte, error) {
const op = "encode lobby application rejected payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(48)
notificationfbs.LobbyApplicationRejectedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.LobbyApplicationRejectedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
offset := notificationfbs.LobbyApplicationRejectedEventEnd(builder)
notificationfbs.FinishLobbyApplicationRejectedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyApplicationRejectedEvent decodes FlatBuffers bytes
// into a LobbyApplicationRejectedEvent.
func PayloadToLobbyApplicationRejectedEvent(data []byte) (result *LobbyApplicationRejectedEvent, err error) {
const op = "decode lobby application rejected payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyApplicationRejectedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &LobbyApplicationRejectedEvent{GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo())}, nil
}
// LobbyMembershipRemovedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyMembershipRemovedEventToPayload(event *LobbyMembershipRemovedEvent) ([]byte, error) {
const op = "encode lobby membership removed payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
builder := flatbuffers.NewBuilder(48)
var reasonOff flatbuffers.UOffsetT
if event.Reason != "" {
reasonOff = builder.CreateString(event.Reason)
}
notificationfbs.LobbyMembershipRemovedEventStart(builder)
if reasonOff != 0 {
notificationfbs.LobbyMembershipRemovedEventAddReason(builder, reasonOff)
}
offset := notificationfbs.LobbyMembershipRemovedEventEnd(builder)
notificationfbs.FinishLobbyMembershipRemovedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyMembershipRemovedEvent decodes FlatBuffers bytes into
// a LobbyMembershipRemovedEvent.
func PayloadToLobbyMembershipRemovedEvent(data []byte) (result *LobbyMembershipRemovedEvent, err error) {
const op = "decode lobby membership removed payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyMembershipRemovedEvent(data, 0)
return &LobbyMembershipRemovedEvent{Reason: string(flat.Reason())}, nil
}
// LobbyMembershipBlockedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyMembershipBlockedEventToPayload(event *LobbyMembershipBlockedEvent) ([]byte, error) {
const op = "encode lobby membership blocked payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(64)
var reasonOff flatbuffers.UOffsetT
if event.Reason != "" {
reasonOff = builder.CreateString(event.Reason)
}
notificationfbs.LobbyMembershipBlockedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.LobbyMembershipBlockedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
if reasonOff != 0 {
notificationfbs.LobbyMembershipBlockedEventAddReason(builder, reasonOff)
}
offset := notificationfbs.LobbyMembershipBlockedEventEnd(builder)
notificationfbs.FinishLobbyMembershipBlockedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyMembershipBlockedEvent decodes FlatBuffers bytes into
// a LobbyMembershipBlockedEvent.
func PayloadToLobbyMembershipBlockedEvent(data []byte) (result *LobbyMembershipBlockedEvent, err error) {
const op = "decode lobby membership blocked payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyMembershipBlockedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &LobbyMembershipBlockedEvent{
GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo()),
Reason: string(flat.Reason()),
}, nil
}
// LobbyRaceNameRegisteredEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyRaceNameRegisteredEventToPayload(event *LobbyRaceNameRegisteredEvent) ([]byte, error) {
const op = "encode lobby race name registered payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.RaceName == "" {
return nil, fmt.Errorf("%s: race_name is empty", op)
}
builder := flatbuffers.NewBuilder(48)
raceName := builder.CreateString(event.RaceName)
notificationfbs.LobbyRaceNameRegisteredEventStart(builder)
notificationfbs.LobbyRaceNameRegisteredEventAddRaceName(builder, raceName)
offset := notificationfbs.LobbyRaceNameRegisteredEventEnd(builder)
notificationfbs.FinishLobbyRaceNameRegisteredEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyRaceNameRegisteredEvent decodes FlatBuffers bytes into
// a LobbyRaceNameRegisteredEvent.
func PayloadToLobbyRaceNameRegisteredEvent(data []byte) (result *LobbyRaceNameRegisteredEvent, err error) {
const op = "decode lobby race name registered payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyRaceNameRegisteredEvent(data, 0)
raceName, err := requiredNotificationString(flat.RaceName(), "race_name")
if err != nil {
return nil, fmt.Errorf("%s: %w", op, err)
}
return &LobbyRaceNameRegisteredEvent{RaceName: raceName}, nil
}
// LobbyRaceNamePendingEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyRaceNamePendingEventToPayload(event *LobbyRaceNamePendingEvent) ([]byte, error) {
const op = "encode lobby race name pending payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.RaceName == "" {
return nil, fmt.Errorf("%s: race_name is empty", op)
}
builder := flatbuffers.NewBuilder(64)
raceName := builder.CreateString(event.RaceName)
var expiresAtOff flatbuffers.UOffsetT
if event.ExpiresAt != "" {
expiresAtOff = builder.CreateString(event.ExpiresAt)
}
notificationfbs.LobbyRaceNamePendingEventStart(builder)
notificationfbs.LobbyRaceNamePendingEventAddRaceName(builder, raceName)
if expiresAtOff != 0 {
notificationfbs.LobbyRaceNamePendingEventAddExpiresAt(builder, expiresAtOff)
}
offset := notificationfbs.LobbyRaceNamePendingEventEnd(builder)
notificationfbs.FinishLobbyRaceNamePendingEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyRaceNamePendingEvent decodes FlatBuffers bytes into a
// LobbyRaceNamePendingEvent.
func PayloadToLobbyRaceNamePendingEvent(data []byte) (result *LobbyRaceNamePendingEvent, err error) {
const op = "decode lobby race name pending payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyRaceNamePendingEvent(data, 0)
raceName, err := requiredNotificationString(flat.RaceName(), "race_name")
if err != nil {
return nil, fmt.Errorf("%s: %w", op, err)
}
return &LobbyRaceNamePendingEvent{
RaceName: raceName,
ExpiresAt: string(flat.ExpiresAt()),
}, nil
}
// LobbyRaceNameExpiredEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func LobbyRaceNameExpiredEventToPayload(event *LobbyRaceNameExpiredEvent) ([]byte, error) {
const op = "encode lobby race name expired payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.RaceName == "" {
return nil, fmt.Errorf("%s: race_name is empty", op)
}
builder := flatbuffers.NewBuilder(48)
raceName := builder.CreateString(event.RaceName)
notificationfbs.LobbyRaceNameExpiredEventStart(builder)
notificationfbs.LobbyRaceNameExpiredEventAddRaceName(builder, raceName)
offset := notificationfbs.LobbyRaceNameExpiredEventEnd(builder)
notificationfbs.FinishLobbyRaceNameExpiredEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToLobbyRaceNameExpiredEvent decodes FlatBuffers bytes into a
// LobbyRaceNameExpiredEvent.
func PayloadToLobbyRaceNameExpiredEvent(data []byte) (result *LobbyRaceNameExpiredEvent, err error) {
const op = "decode lobby race name expired payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsLobbyRaceNameExpiredEvent(data, 0)
raceName, err := requiredNotificationString(flat.RaceName(), "race_name")
if err != nil {
return nil, fmt.Errorf("%s: %w", op, err)
}
return &LobbyRaceNameExpiredEvent{RaceName: raceName}, nil
}
// RuntimeImagePullFailedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func RuntimeImagePullFailedEventToPayload(event *RuntimeImagePullFailedEvent) ([]byte, error) {
const op = "encode runtime image pull failed payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(64)
var imageRefOff flatbuffers.UOffsetT
if event.ImageRef != "" {
imageRefOff = builder.CreateString(event.ImageRef)
}
notificationfbs.RuntimeImagePullFailedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.RuntimeImagePullFailedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
if imageRefOff != 0 {
notificationfbs.RuntimeImagePullFailedEventAddImageRef(builder, imageRefOff)
}
offset := notificationfbs.RuntimeImagePullFailedEventEnd(builder)
notificationfbs.FinishRuntimeImagePullFailedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToRuntimeImagePullFailedEvent decodes FlatBuffers bytes into
// a RuntimeImagePullFailedEvent.
func PayloadToRuntimeImagePullFailedEvent(data []byte) (result *RuntimeImagePullFailedEvent, err error) {
const op = "decode runtime image pull failed payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsRuntimeImagePullFailedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &RuntimeImagePullFailedEvent{
GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo()),
ImageRef: string(flat.ImageRef()),
}, nil
}
// RuntimeContainerStartFailedEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func RuntimeContainerStartFailedEventToPayload(event *RuntimeContainerStartFailedEvent) ([]byte, error) {
const op = "encode runtime container start failed payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(48)
notificationfbs.RuntimeContainerStartFailedEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.RuntimeContainerStartFailedEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
offset := notificationfbs.RuntimeContainerStartFailedEventEnd(builder)
notificationfbs.FinishRuntimeContainerStartFailedEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToRuntimeContainerStartFailedEvent decodes FlatBuffers bytes
// into a RuntimeContainerStartFailedEvent.
func PayloadToRuntimeContainerStartFailedEvent(data []byte) (result *RuntimeContainerStartFailedEvent, err error) {
const op = "decode runtime container start failed payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsRuntimeContainerStartFailedEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &RuntimeContainerStartFailedEvent{GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo())}, nil
}
// RuntimeStartConfigInvalidEventToPayload encodes the event into the
// FlatBuffers bytes published on the gateway client event stream.
func RuntimeStartConfigInvalidEventToPayload(event *RuntimeStartConfigInvalidEvent) ([]byte, error) {
const op = "encode runtime start config invalid payload"
if event == nil {
return nil, fmt.Errorf("%s: event is nil", op)
}
if event.GameID == uuid.Nil {
return nil, fmt.Errorf("%s: game_id is empty", op)
}
builder := flatbuffers.NewBuilder(64)
var reasonOff flatbuffers.UOffsetT
if event.Reason != "" {
reasonOff = builder.CreateString(event.Reason)
}
notificationfbs.RuntimeStartConfigInvalidEventStart(builder)
hi, lo := uuidToHiLo(event.GameID)
notificationfbs.RuntimeStartConfigInvalidEventAddGameId(builder, commonfbs.CreateUUID(builder, hi, lo))
if reasonOff != 0 {
notificationfbs.RuntimeStartConfigInvalidEventAddReason(builder, reasonOff)
}
offset := notificationfbs.RuntimeStartConfigInvalidEventEnd(builder)
notificationfbs.FinishRuntimeStartConfigInvalidEventBuffer(builder, offset)
return builder.FinishedBytes(), nil
}
// PayloadToRuntimeStartConfigInvalidEvent decodes FlatBuffers bytes
// into a RuntimeStartConfigInvalidEvent.
func PayloadToRuntimeStartConfigInvalidEvent(data []byte) (result *RuntimeStartConfigInvalidEvent, err error) {
const op = "decode runtime start config invalid payload"
if len(data) == 0 {
return nil, fmt.Errorf("%s: data is empty", op)
}
defer recoverNotificationDecodePanic(op, &result, &err)
flat := notificationfbs.GetRootAsRuntimeStartConfigInvalidEvent(data, 0)
gameID := flat.GameId(nil)
if gameID == nil {
return nil, fmt.Errorf("%s: game_id is missing", op)
}
return &RuntimeStartConfigInvalidEvent{
GameID: uuidFromHiLo(gameID.Hi(), gameID.Lo()),
Reason: string(flat.Reason()),
}, nil
}
func requiredNotificationString(value []byte, field string) (string, error) {
if len(value) == 0 {
return "", fmt.Errorf("%s is missing", field)
}
return string(value), nil
}
func recoverNotificationDecodePanic[T any](message string, result **T, err *error) {
if recovered := recover(); recovered != nil {
*result = nil
*err = fmt.Errorf("%s: panic recovered: %v", message, recovered)
}
}