From 647aa9d02fb275c47ae00c552977d42013888a6b Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 2 Dec 2025 03:06:27 +0900 Subject: [PATCH] internal/pipewire: preallocate for footer This is useful during serialisation. Signed-off-by: Ophestra --- internal/pipewire/core.go | 12 ++++++++++++ internal/pipewire/pod.go | 11 +++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/internal/pipewire/core.go b/internal/pipewire/core.go index a15d080..4b61972 100644 --- a/internal/pipewire/core.go +++ b/internal/pipewire/core.go @@ -81,6 +81,12 @@ type FooterCoreGeneration struct { RegistryGeneration Long `json:"registry_generation"` } +// Size satisfies [KnownSize] with a constant value. +func (fcg FooterCoreGeneration) Size() Word { + return SizePrefix + + Size(SizeLong) +} + // The FooterClientGeneration indicates to the server what is the last // registry generation number the client has processed. // @@ -91,6 +97,12 @@ type FooterClientGeneration struct { ClientGeneration Long `json:"client_generation"` } +// Size satisfies [KnownSize] with a constant value. +func (fcg FooterClientGeneration) Size() Word { + return SizePrefix + + Size(SizeLong) +} + // A CoreInfo event is emitted by the server upon connection // with the more information about the server. type CoreInfo struct { diff --git a/internal/pipewire/pod.go b/internal/pipewire/pod.go index fe6c43a..88a49e8 100644 --- a/internal/pipewire/pod.go +++ b/internal/pipewire/pod.go @@ -468,11 +468,18 @@ func unmarshalCheckTypeBounds(data *[]byte, t Word, sizeP *Word) error { // The Footer contains additional messages, not directed to // the destination object defined by the Id field. -type Footer[T any] struct { +type Footer[P KnownSize] struct { // The footer opcode. Opcode Id `json:"opcode"` // The footer payload struct. - Payload T `json:"payload"` + Payload P `json:"payload"` +} + +// Size satisfies [KnownSize] with a usually compile-time known value. +func (f *Footer[P]) Size() Word { + return SizePrefix + + Size(SizeId) + + f.Payload.Size() } // MarshalBinary satisfies [encoding.BinaryMarshaler] via [Marshal].