internal/pipewire: implement Registry::Destroy
All checks were successful
Test / Create distribution (push) Successful in 37s
Test / Sandbox (push) Successful in 2m44s
Test / Sandbox (race detector) (push) Successful in 4m56s
Test / Hakurei (push) Successful in 5m7s
Test / Hpkg (push) Successful in 5m7s
Test / Hakurei (race detector) (push) Successful in 7m0s
Test / Flake checks (push) Successful in 2m0s
All checks were successful
Test / Create distribution (push) Successful in 37s
Test / Sandbox (push) Successful in 2m44s
Test / Sandbox (race detector) (push) Successful in 4m56s
Test / Hakurei (push) Successful in 5m7s
Test / Hpkg (push) Successful in 5m7s
Test / Hakurei (race detector) (push) Successful in 7m0s
Test / Flake checks (push) Successful in 2m0s
This requires error handling infrastructure in Core that does not yet exist, so it is not exported for now. It has been manually tested via linkname against PipeWire. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -608,6 +608,39 @@ 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.
|
||||||
|
ID Int `json:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Opcode satisfies [Message] with a constant value.
|
||||||
|
func (c *RegistryDestroy) Opcode() byte { return PW_REGISTRY_METHOD_DESTROY }
|
||||||
|
|
||||||
|
// FileCount satisfies [Message] with a constant value.
|
||||||
|
func (c *RegistryDestroy) FileCount() Int { return 0 }
|
||||||
|
|
||||||
|
// Size satisfies [KnownSize] with a constant value.
|
||||||
|
func (c *RegistryDestroy) Size() Word {
|
||||||
|
return SizePrefix +
|
||||||
|
Size(SizeInt)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalBinary satisfies [encoding.BinaryMarshaler] via [Marshal].
|
||||||
|
func (c *RegistryDestroy) MarshalBinary() ([]byte, error) { return Marshal(c) }
|
||||||
|
|
||||||
|
// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
|
||||||
|
func (c *RegistryDestroy) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }
|
||||||
|
|
||||||
|
// destroy queues a [RegistryDestroy] message for the PipeWire server.
|
||||||
|
func (registry *Registry) destroy(id Int) error {
|
||||||
|
return registry.ctx.writeMessage(
|
||||||
|
registry.ID,
|
||||||
|
&RegistryDestroy{id},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// 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
|
type UnsupportedObjectTypeError string
|
||||||
|
|
||||||
|
|||||||
@@ -774,3 +774,20 @@ func TestRegistryBind(t *testing.T) {
|
|||||||
}, nil},
|
}, nil},
|
||||||
}.run(t)
|
}.run(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRegistryDestroy(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
encodingTestCases[pipewire.RegistryDestroy, *pipewire.RegistryDestroy]{
|
||||||
|
{"sample", []byte{
|
||||||
|
/* size: rest of data*/ 0x10, 0, 0, 0,
|
||||||
|
/* type: Struct */ 0xe, 0, 0, 0,
|
||||||
|
/* size: 4 bytes */ 4, 0, 0, 0,
|
||||||
|
/* type: Int */ 4, 0, 0, 0,
|
||||||
|
/* value: 0xbad */ 0xad, 0xb, 0, 0,
|
||||||
|
/* padding */ 0, 0, 0, 0,
|
||||||
|
}, pipewire.RegistryDestroy{
|
||||||
|
ID: 0xbad,
|
||||||
|
}, nil},
|
||||||
|
}.run(t)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user