aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pipewire/core.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-10-27 20:13:13 +0900
committerOphestra <cat@gensokyo.uk>2026-10-27 20:13:13 +0900
commitea29e6bad114306b78820cb674863a9bf3041fa5 (patch)
treeda87b09d5b3b57d6744db90b697124c5d4569e8d /internal/pipewire/core.go
parent672cf9abcac6f25abfdd2541cae6455c6da38fc3 (diff)
internal/pipewire: re-format for readability
This package was the first somewhat large piece of code that was primarily written using the built-in display of my laptop. The experience had been deeply unpleasant due to the awkward 3:2 aspect ratio not working well with my setup, which almost always involved having the implementation and tests side-by-side. This experience is what provoked me to re-instate the 80-column limit that I had long resented and rejected. This package however predates the formal re-instating of this limit, and was never updated. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pipewire/core.go')
-rw-r--r--internal/pipewire/core.go251
1 files changed, 154 insertions, 97 deletions
diff --git a/internal/pipewire/core.go b/internal/pipewire/core.go
index 026f75bb..b0d82b44 100644
--- a/internal/pipewire/core.go
+++ b/internal/pipewire/core.go
@@ -84,8 +84,8 @@ const (
FOOTER_CORE_OPCODE_LAST
)
-// The FooterCoreGeneration indicates to the client what is the current
-// registry generation number of the Context on the server side.
+// The FooterCoreGeneration indicates to the client what is the current registry
+// generation number of the Context on the server side.
//
// The server shall include this footer in the next message it sends that
// follows the increment of the registry generation number.
@@ -99,12 +99,12 @@ func (fcg FooterCoreGeneration) Size() Word {
Size(SizeLong)
}
-// The FooterClientGeneration indicates to the server what is the last
-// registry generation number the client has processed.
+// The FooterClientGeneration indicates to the server what is the last registry
+// generation number the client has processed.
//
-// The client shall include this footer in the next message it sends,
-// after it has processed an incoming message whose footer includes a
-// registry generation update.
+// The client shall include this footer in the next message it sends, after it
+// has processed an incoming message whose footer includes a registry generation
+// update.
type FooterClientGeneration struct {
ClientGeneration Long `json:"client_generation"`
}
@@ -115,8 +115,8 @@ func (fcg FooterClientGeneration) Size() Word {
Size(SizeLong)
}
-// A CoreInfo event is emitted by the server upon connection
-// with the more information about the server.
+// A CoreInfo event is emitted by the server upon connection with the more
+// information about the server.
type CoreInfo struct {
// The id of the server (PW_ID_CORE).
ID Int `json:"id"`
@@ -132,7 +132,8 @@ type CoreInfo struct {
Name String `json:"name"`
// A set of bits with changes to the info.
ChangeMask Long `json:"change_mask"`
- // Optional key/value properties, valid when change_mask has PW_CORE_CHANGE_MASK_PROPS.
+ // Optional key/value properties, valid when change_mask has
+ // PW_CORE_CHANGE_MASK_PROPS.
Properties *SPADict `json:"props"`
}
@@ -184,12 +185,13 @@ func (c *CoreDone) MarshalBinary() ([]byte, error) { return Marshal(c) }
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
func (c *CoreDone) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
-// The CorePing event is emitted by the server when it wants to check if a client is
-// alive or ensure that it has processed the previous events.
+// The CorePing event is emitted by the server when it wants to check if a
+// client is alive or ensure that it has processed the previous events.
type CorePing struct {
// The object id to ping.
ID Int `json:"id"`
// Usually automatically generated.
+ //
// The client should pass this in the Pong method reply.
Sequence Int `json:"seq"`
}
@@ -212,13 +214,12 @@ func (c *CorePing) UnmarshalBinary(data []byte) error { return Unmarshal(data, c
// The CoreError can be emitted by both the client and the server.
//
// When emitted by the server, the error event is sent out when a fatal
-// (non-recoverable) error has occurred. The id argument is the proxy
-// object where the error occurred, most often in response to a request
-// to that object. The message is a brief description of the error, for
-// (debugging) convenience.
+// (non-recoverable) error has occurred. The id argument is the proxy object
+// where the error occurred, most often in response to a request to that object.
+// The message is a brief description of the error, for (debugging) convenience.
//
-// When emitted by the client, it indicates an error occurred in an
-// object on the client.
+// When emitted by the client, it indicates an error occurred in an object on
+// the client.
type CoreError struct {
// The id of the resource (proxy if emitted by the client) that is in error.
ID Int `json:"id"`
@@ -270,9 +271,9 @@ func (c *CoreErrorEvent) Opcode() byte { return PW_CORE_EVENT_ERROR }
// The CoreRemoveId event is used internally by the object ID management logic.
//
-// When a client deletes an object, the server will send this event to acknowledge
-// that it has seen the delete request. When the client receives this event, it
-// will know that it can safely reuse the object ID.
+// When a client deletes an object, the server will send this event to
+// acknowledge that it has seen the delete request. When the client receives
+// this event, it will know that it can safely reuse the object ID.
type CoreRemoveId struct {
// A proxy id that was removed.
ID Int `json:"id"`
@@ -293,8 +294,8 @@ func (c *CoreRemoveId) MarshalBinary() ([]byte, error) { return Marshal(c) }
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
func (c *CoreRemoveId) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
-// The CoreBoundProps event is emitted when a local object ID is bound to a global ID.
-// It is emitted before the global becomes visible in the registry.
+// The CoreBoundProps event is emitted when a local object ID is bound to a
+// global ID. It is emitted before the global becomes visible in the registry.
type CoreBoundProps struct {
// A proxy id.
ID Int `json:"id"`
@@ -334,8 +335,8 @@ type noAck struct{}
// setBoundProps should never be called as this proxy should never be targeted by [CoreBoundProps].
func (noAck) setBoundProps(*CoreBoundProps) error { panic(ErrBadBoundProps) }
-// ErrBadRemove is returned when a [CoreRemoveId] event targeting a proxy
-// that should never be targeted is received and processed.
+// ErrBadRemove is returned when a [CoreRemoveId] event targeting a proxy that
+// should never be targeted is received and processed.
var ErrBadRemove = errors.New("attempting to remove a proxy that should never be targeted")
// noRemove is embedded by proxies that are never targeted by [CoreRemoveId].
@@ -344,11 +345,14 @@ type noRemove struct{}
// remove should never be called as this proxy should never be targeted by [CoreRemoveId].
func (noRemove) remove() error { panic(ErrBadRemove) }
-// ErrInvalidRemove is returned when a proxy is somehow removed twice. This is only reached for
-// an implementation error as the proxy struct should no longer be reachable after the first call.
+// ErrInvalidRemove is returned when a proxy is somehow removed twice.
+//
+// This is only reached for an implementation error as the proxy struct should
+// no longer be reachable after the first call.
var ErrInvalidRemove = errors.New("attempting to remove an already freed proxy")
-// removable is embedded by proxies that can be targeted by [CoreRemoveId] and requires no cleanup.
+// removable is embedded by proxies that can be targeted by [CoreRemoveId] and
+// requires no cleanup.
type removable bool
// remove checks against removal of a freed proxy and marks the proxy as removed.
@@ -360,21 +364,27 @@ func (s *removable) remove() error {
return nil
}
-// ErrProxyDestroyed is returned when attempting to use a proxy method when the underlying
-// proxy has already been targeted by a [CoreRemoveId] event.
+// ErrProxyDestroyed is returned when attempting to use a proxy method when the
+// underlying proxy has already been targeted by a [CoreRemoveId] event.
var ErrProxyDestroyed = errors.New("underlying proxy has been removed")
-// checkDestroy returns [ErrProxyDestroyed] if the current proxy has been destroyed.
-// Must be called at the beginning of any exported method of a proxy embedding removable.
+// checkDestroy returns [ErrProxyDestroyed] if the current proxy has been
+// destroyed.
+//
+// Must be called at the beginning of any exported method of a proxy embedding
+// removable.
func (s *removable) checkDestroy() error {
if *s {
- // not fatal: the caller is allowed to recover from this and allocate a new proxy
+ // not fatal: the caller is allowed to recover from this and allocate a
+ // new proxy
return ErrProxyDestroyed
}
return nil
}
-// mustCheckDestroy calls checkDestroy and panics if a non-nil error is returned.
+// mustCheckDestroy calls checkDestroy and panics if a non-nil error is
+// returned.
+//
// This is useful for non-exported methods as they should become unreachable.
func (s *removable) mustCheckDestroy() {
if err := s.checkDestroy(); err != nil {
@@ -382,17 +392,19 @@ func (s *removable) mustCheckDestroy() {
}
}
-// destructible is embedded by proxies that can be targeted by the [CoreRemoveId] event and the
-// [CoreDestroy] method and requires no cleanup. destructible purposefully does not override
-// removable.mustCheckDestroy because it is used by unexported methods called during event handling
-// and are exempt from the destruction check.
+// destructible is embedded by proxies that can be targeted by the
+// [CoreRemoveId] event and the [CoreDestroy] method and requires no cleanup.
+// destructible purposefully does not override removable.mustCheckDestroy
+// because it is used by unexported methods called during event handling and are
+// exempt from the destruction check.
type destructible struct {
destroyed bool
removable
}
-// checkDestroy overrides removable.checkDestroy to also check the destroyed field.
+// checkDestroy overrides removable.checkDestroy to also check the destroyed
+// field.
func (s *destructible) checkDestroy() error {
if s.destroyed {
return ErrProxyDestroyed
@@ -403,7 +415,8 @@ func (s *destructible) checkDestroy() error {
return nil
}
-// destroy calls removable.checkDestroy then queues a [CoreDestroy] event if it succeeds.
+// destroy calls removable.checkDestroy then queues a [CoreDestroy] event if it
+// succeeds.
func (s *destructible) destroy(ctx *Context, id Int) error {
if err := s.checkDestroy(); err != nil {
return err
@@ -417,8 +430,10 @@ func (s *destructible) destroy(ctx *Context, id Int) error {
return ctx.GetCore().destroy(id)
}
-// An InconsistentIdError describes an inconsistent state where the server claims an impossible
-// proxy or global id. This is only generated by the [CoreBoundProps] event.
+// An InconsistentIdError describes an inconsistent state where the server claims
+// an impossible proxy or global id.
+//
+// This is only generated by the [CoreBoundProps] event.
type InconsistentIdError struct {
// Whether the inconsistent id is the global resource id.
Global bool
@@ -434,8 +449,9 @@ func (e *InconsistentIdError) Error() string {
name = "global"
}
- return name + " id " + strconv.Itoa(int(e.ID)) + " targeting " + e.Proxy.String() +
- " inconsistent with " + strconv.Itoa(int(e.ServerID)) + " claimed by the server"
+ return name + " id " + strconv.Itoa(int(e.ID)) + " targeting " +
+ e.Proxy.String() + " inconsistent with " +
+ strconv.Itoa(int(e.ServerID)) + " claimed by the server"
}
// CoreHello is the first message sent by a client.
@@ -460,7 +476,9 @@ func (c *CoreHello) MarshalBinary() ([]byte, error) { return Marshal(c) }
func (c *CoreHello) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
// hello queues a [CoreHello] message for the PipeWire server.
-// This method should not be called directly, the [New] function queues this message.
+//
+// This method should not be called directly, the [New] function queues this
+// message.
func (core *Core) hello() error {
return core.ctx.writeMessage(
PW_ID_CORE,
@@ -469,13 +487,14 @@ func (core *Core) hello() error {
}
const (
- // CoreSyncSequenceOffset is the offset to [Header.Sequence] to produce [CoreSync.Sequence].
+ // CoreSyncSequenceOffset is the offset to [Header.Sequence] to produce
+ // [CoreSync.Sequence].
CoreSyncSequenceOffset = 0x40000000
)
-// The CoreSync message will result in a Done event from the server.
-// When the Done event is received, the client can be sure that all
-// operations before the Sync method have been completed.
+// The CoreSync message will result in a Done event from the server. When the
+// Done event is received, the client can be sure that all operations before the
+// Sync method have been completed.
type CoreSync struct {
// The id will be returned in the Done event.
ID Int `json:"id"`
@@ -499,6 +518,7 @@ func (c *CoreSync) MarshalBinary() ([]byte, error) { return Marshal(c) }
func (c *CoreSync) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
// sync queues a [CoreSync] message for the PipeWire server.
+//
// This is not safe to use directly, callers should use Sync instead.
func (core *Core) sync(id Int) error {
return core.ctx.writeMessage(
@@ -507,9 +527,11 @@ func (core *Core) sync(id Int) error {
)
}
-// ErrNotDone is returned if [Core.Sync] returns from its [Context.Roundtrip] without
-// receiving a [CoreDone] event targeting the [CoreSync] event it delivered.
-var ErrNotDone = errors.New("did not receive a Core::Done event targeting previously delivered Core::Sync")
+// ErrNotDone is returned if [Core.Sync] returns from its [Context.Roundtrip]
+// without receiving a [CoreDone] event targeting the [CoreSync] event it
+// delivered.
+var ErrNotDone = errors.New("did not receive a Core::Done event " +
+ "targeting previously delivered Core::Sync")
const (
// syncTimeout is the maximum duration [Core.Sync] is allowed to take before
@@ -517,7 +539,8 @@ const (
syncTimeout = RoundtripTimeout + 15*time.Second
)
-// Sync queues a [CoreSync] message for the PipeWire server and initiates a Roundtrip.
+// Sync queues a [CoreSync] message for the PipeWire server and initiates a
+// Roundtrip.
func (core *Core) Sync() error {
core.done = false
if err := core.sync(roundtripSyncID); err != nil {
@@ -537,16 +560,31 @@ func (core *Core) Sync() error {
if len(core.ctx.pendingIds) != 0 {
core.ctx.closeReceivedFiles()
- return &ProxyFatalError{Err: UnacknowledgedProxyError(slices.Collect(maps.Keys(core.ctx.pendingIds))), ProxyErrs: core.ctx.cloneAsProxyErrors()}
+ return &ProxyFatalError{
+ Err: UnacknowledgedProxyError(slices.Collect(
+ maps.Keys(
+ core.ctx.pendingIds,
+ )),
+ ),
+ ProxyErrs: core.ctx.cloneAsProxyErrors(),
+ }
}
if len(core.ctx.pendingDestruction) != 0 {
core.ctx.closeReceivedFiles()
- return &ProxyFatalError{Err: UnacknowledgedProxyDestructionError(slices.Collect(maps.Keys(core.ctx.pendingDestruction))), ProxyErrs: core.ctx.cloneAsProxyErrors()}
+ return &ProxyFatalError{
+ Err: UnacknowledgedProxyDestructionError(slices.Collect(
+ maps.Keys(
+ core.ctx.pendingDestruction,
+ )),
+ ),
+ ProxyErrs: core.ctx.cloneAsProxyErrors(),
+ }
}
return core.ctx.doSyncComplete()
}
-// The CorePong message is sent from the client to the server when the server emits the Ping event.
+// The CorePong message is sent from the client to the server when the server
+// emits the Ping event.
type CorePong struct {
// Copied from [CorePing.ID].
ID Int `json:"id"`
@@ -569,18 +607,18 @@ func (c *CorePong) MarshalBinary() ([]byte, error) { return Marshal(c) }
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
func (c *CorePong) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
-// CoreGetRegistry is sent when a client requests to bind to the
-// registry object and list the available objects on the server.
+// CoreGetRegistry is sent when a client requests to bind to the registry object
+// and list the available objects on the server.
//
-// Like with all bindings, first the client allocates a new proxy
-// id and puts this as the new_id field. Methods and Events can
-// then be sent and received on the new_id (in the message Id field).
+// Like with all bindings, first the client allocates a new proxy id and puts
+// this as the new_id field. Methods and Events can then be sent and received on
+// the new_id (in the message Id field).
type CoreGetRegistry struct {
// The version of the registry interface used on the client,
// usually PW_VERSION_REGISTRY.
Version Int `json:"version"`
- // The id of the new proxy with the registry interface,
- // ends up as [Header.ID] in future messages.
+ // The id of the new proxy with the registry interface, ends up as
+ // [Header.ID] in future messages.
NewID Int `json:"new_id"`
}
@@ -599,8 +637,8 @@ func (c *CoreGetRegistry) MarshalBinary() ([]byte, error) { return Marshal(c) }
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
func (c *CoreGetRegistry) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
-// GetRegistry queues a [CoreGetRegistry] message for the PipeWire server
-// and returns the address of the newly allocated [Registry].
+// GetRegistry queues a [CoreGetRegistry] message for the PipeWire server and
+// returns the address of the newly allocated [Registry].
func (ctx *Context) GetRegistry() (*Registry, error) {
registry := Registry{Objects: make(map[Int]RegistryGlobal), ctx: ctx}
newId := ctx.newProxyId(&registry, false)
@@ -611,18 +649,17 @@ func (ctx *Context) GetRegistry() (*Registry, error) {
)
}
-// CoreCreateObject is sent when the client requests to create a
-// new object from a factory of a certain type.
+// CoreCreateObject is sent when the client requests to create a new object from
+// a factory of a certain type.
//
-// The client allocates a new_id for the proxy. The server will
-// allocate a new resource with the same new_id and from then on,
-// Methods and Events will be exchanged between the new object of
-// the given type.
+// The client allocates a new_id for the proxy. The server will allocate a new
+// resource with the same new_id and from then on, Methods and Events will be
+// exchanged between the new object of the given type.
type CoreCreateObject struct {
// The name of a server factory object to use.
FactoryName String `json:"factory_name"`
- // The type of the object to create, this is also the type of
- // the interface of the new_id proxy.
+ // The type of the object to create, this is also the type of the interface
+ // of the new_id proxy.
Type String `json:"type"`
// Undocumented, assumed to be the local version of the proxy.
Version Int `json:"version"`
@@ -655,7 +692,9 @@ func (c *CoreCreateObject) MarshalBinary() ([]byte, error) { return Marshal(c) }
func (c *CoreCreateObject) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
// createObject queues a [CoreCreateObject] message for the PipeWire server.
-// This is not safe to use directly, callers should use typed wrapper methods on [Registry] instead.
+//
+// This is not safe to use directly, callers should use typed wrapper methods on
+// [Registry] instead.
func (core *Core) createObject(factoryName, typeName String, version Int, props SPADict, newId Int) error {
return core.ctx.writeMessage(
PW_ID_CORE,
@@ -685,8 +724,9 @@ func (c *CoreDestroy) MarshalBinary() ([]byte, error) { return Marshal(c) }
func (c *CoreDestroy) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
// destroy queues a [CoreDestroy] message for the PipeWire server.
-// This is not safe to use directly, callers should use the exported method
-// on the proxy implementation instead.
+//
+// This is not safe to use directly, callers should use the exported method on
+// the proxy implementation instead.
func (core *Core) destroy(id Int) error {
return core.ctx.writeMessage(
PW_ID_CORE,
@@ -754,10 +794,9 @@ func (c *RegistryGlobalRemove) MarshalBinary() ([]byte, error) { return Marshal(
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
func (c *RegistryGlobalRemove) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
-// RegistryBind is sent when the client requests to bind to the
-// global object with id and use the client proxy with new_id as
-// the proxy. After this call, methods can be sent to the remote
-// global object and events can be received.
+// RegistryBind is sent when the client requests to bind to the global object
+// with id and use the client proxy with new_id as the proxy. After this call,
+// methods can be sent to the remote global object and events can be received.
type RegistryBind struct {
// The [RegistryGlobal.ID] to bind to.
ID Int `json:"id"`
@@ -790,8 +829,8 @@ func (c *RegistryBind) MarshalBinary() ([]byte, error) { return Marshal(c) }
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
func (c *RegistryBind) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
-// bind queues a [RegistryBind] message for the PipeWire server
-// and returns the newly allocated proxy id.
+// bind queues a [RegistryBind] message for the PipeWire server and returns the
+// newly allocated proxy id.
func (registry *Registry) bind(proxy eventProxy, id, version Int) (Int, error) {
bind := RegistryBind{
ID: id,
@@ -806,6 +845,7 @@ func (registry *Registry) bind(proxy eventProxy, id, version Int) (Int, error) {
}
// RegistryDestroy is sent to try to destroy the global object with id.
+//
// This might fail when the client does not have permission.
type RegistryDestroy struct {
// The global id to destroy.
@@ -864,7 +904,8 @@ func (registry *Registry) Destroy(id Int) (err error) {
}
}
-// An UnsupportedObjectTypeError is the name of a type not known by the server [Registry].
+// An UnsupportedObjectTypeError is the name of a type not known by the server
+// [Registry].
type UnsupportedObjectTypeError string
func (e UnsupportedObjectTypeError) Error() string { return "unsupported object type " + string(e) }
@@ -872,7 +913,8 @@ func (e UnsupportedObjectTypeError) Message() string { return e.Error() }
// Core holds state of [PW_TYPE_INTERFACE_Core].
type Core struct {
- // Additional information from the server, populated or updated during [Context.Roundtrip].
+ // Additional information from the server, populated or updated during
+ // [Context.Roundtrip].
Info *CoreInfo `json:"info"`
// Whether a [CoreDone] event was received during Sync.
@@ -887,7 +929,8 @@ type Core struct {
// ErrUnexpectedDone is a [CoreDone] event with unexpected values.
var ErrUnexpectedDone = errors.New("multiple Core::Done events targeting Core::Sync")
-// An UnknownProxyIdError describes an event targeting a proxy id that was never allocated.
+// An UnknownProxyIdError describes an event targeting a proxy id that was never
+// allocated.
type UnknownProxyIdError[E any] struct {
// Offending id decoded from Data.
Id Int
@@ -899,7 +942,8 @@ func (e *UnknownProxyIdError[E]) Error() string {
return "unknown proxy id " + strconv.Itoa(int(e.Id))
}
-// An InvalidPingError is a [CorePing] event targeting a proxy id that was never allocated.
+// An InvalidPingError is a [CorePing] event targeting a proxy id that was never
+// allocated.
type InvalidPingError CorePing
func (e *InvalidPingError) Error() string {
@@ -917,7 +961,8 @@ func (core *Core) consume(opcode byte, files []int, unmarshal func(v any)) error
case PW_CORE_EVENT_DONE:
var done CoreDone
unmarshal(&done)
- if done.ID == roundtripSyncID && done.Sequence == CoreSyncSequenceOffset+core.ctx.currentSeq() {
+ if done.ID == roundtripSyncID &&
+ done.Sequence == CoreSyncSequenceOffset+core.ctx.currentSeq() {
if core.done {
return ErrUnexpectedDone
}
@@ -956,7 +1001,10 @@ func (core *Core) consume(opcode byte, files []int, unmarshal func(v any)) error
unmarshal(&coreRemoveId)
if proxy, ok := core.ctx.proxy[coreRemoveId.ID]; !ok {
// this should never happen so is non-recoverable if it does
- panic(&UnknownProxyIdError[*CoreRemoveId]{Id: coreRemoveId.ID, Event: &coreRemoveId})
+ panic(&UnknownProxyIdError[*CoreRemoveId]{
+ Id: coreRemoveId.ID,
+ Event: &coreRemoveId},
+ )
} else {
delete(core.ctx.proxy, coreRemoveId.ID)
// not always populated so this is not checked
@@ -971,7 +1019,10 @@ func (core *Core) consume(opcode byte, files []int, unmarshal func(v any)) error
delete(core.ctx.pendingIds, boundProps.ID)
proxy, ok := core.ctx.proxy[boundProps.ID]
if !ok {
- return &UnknownProxyIdError[*CoreBoundProps]{Id: boundProps.ID, Event: &boundProps}
+ return &UnknownProxyIdError[*CoreBoundProps]{
+ Id: boundProps.ID,
+ Event: &boundProps,
+ }
}
return proxy.setBoundProps(&boundProps)
@@ -989,8 +1040,8 @@ type Registry struct {
// Global objects received via the [RegistryGlobal] event.
//
- // This requires more processing before it can be used, but is not implemented
- // as it is not used by Hakurei.
+ // This requires more processing before it can be used, but is not
+ // implemented as it is not used by Hakurei.
Objects map[Int]RegistryGlobal `json:"objects"`
ctx *Context
@@ -999,7 +1050,8 @@ type Registry struct {
noRemove
}
-// A GlobalIDCollisionError describes a [RegistryGlobal] event stepping on a previous instance of itself.
+// A GlobalIDCollisionError describes a [RegistryGlobal] event stepping on a
+// previous instance of itself.
type GlobalIDCollisionError struct {
// The colliding id.
ID Int
@@ -1012,8 +1064,9 @@ func (e *GlobalIDCollisionError) Error() string {
" stepping on previous id " + strconv.Itoa(int(e.ID)) + " for " + e.Previous.Type
}
-// An UnknownGlobalIDRemoveError describes a [RegistryGlobalRemove] event announcing the removal of
-// a global id that is not yet known to [Registry] or was already deleted.
+// An UnknownGlobalIDRemoveError describes a [RegistryGlobalRemove] event
+// announcing the removal of a global id that is not yet known to [Registry] or
+// was already deleted.
type UnknownGlobalIDRemoveError Int
func (e UnknownGlobalIDRemoveError) Error() string {
@@ -1028,7 +1081,11 @@ func (registry *Registry) consume(opcode byte, files []int, unmarshal func(v any
unmarshal(&global)
if object, ok := registry.Objects[global.ID]; ok {
// this should never happen so is non-recoverable if it does
- panic(&GlobalIDCollisionError{global.ID, &object, &global})
+ panic(&GlobalIDCollisionError{
+ global.ID,
+ &object,
+ &global,
+ })
}
registry.Objects[global.ID] = global
return nil
@@ -1036,8 +1093,8 @@ func (registry *Registry) consume(opcode byte, files []int, unmarshal func(v any
case PW_REGISTRY_EVENT_GLOBAL_REMOVE:
var globalRemove RegistryGlobalRemove
unmarshal(&globalRemove)
- // server emits PW_CORE_EVENT_REMOVE_ID events targeting
- // affected proxies so they do not need to be handled here
+ // server emits PW_CORE_EVENT_REMOVE_ID events targeting affected
+ // proxies so they do not need to be handled here
l := len(registry.Objects)
delete(registry.Objects, globalRemove.ID)
if len(registry.Objects) != l-1 {