Skip to content

Commit 0d209fc

Browse files
authored
Simplify ClientData implementation (#540)
* Simplify ClientData implementation For smithay compositors it is completely optional to implement the ClientData trait, however due to the required functions on the trait it is still quite verbose to just implement some dummy struct to use for it. Both Smallvill and Anvil have this implemented on a NOOP struct, which indicates that the majority of compositors will likely not interested in implementing this themselves. To make things a little easier for people not interested in implementing this, a default implementation for `()` is added in this patch. This allows just passing `Arc::new(())` to `insert_client`. For people interested in actually using this trait, all functions have been mode optional. That way it's going to be much cleaner when compositors just want to provide a partial implementation. * Fix clippy warnings * Update tests
1 parent 86ab66e commit 0d209fc

9 files changed

+22
-31
lines changed

wayland-backend/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- client: introduce `Backend::dispatch_inner_queue()` meant for ensuring a system backend in guest mode can
1919
still process events event it does not control reading the socket.
2020
- introduce the `log` cargo feature to control logging behavior
21+
- A dummy implementation of ClientData is now provided through `()` and all trait methods are optional
2122

2223
## 0.1.0-beta.7
2324

wayland-backend/src/server_api.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ downcast_rs::impl_downcast!(sync GlobalHandler<D>);
100100
/// A trait representing your data associated to a client
101101
pub trait ClientData: downcast_rs::DowncastSync {
102102
/// Notification that the client was initialized
103-
fn initialized(&self, client_id: ClientId);
103+
fn initialized(&self, _client_id: ClientId) {}
104104
/// Notification that the client is disconnected
105-
fn disconnected(&self, client_id: ClientId, reason: DisconnectReason);
105+
fn disconnected(&self, _client_id: ClientId, _reason: DisconnectReason) {}
106106
/// Helper for forwarding a Debug implementation of your `ClientData` type
107107
///
108108
/// By default will just print `GlobalHandler { ... }`
@@ -119,6 +119,8 @@ impl std::fmt::Debug for dyn ClientData {
119119
}
120120
}
121121

122+
impl ClientData for () {}
123+
122124
downcast_rs::impl_downcast!(sync ClientData);
123125

124126
/// An ID representing a Wayland object

wayland-backend/src/test/destructors.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl_client_objectdata!(client_sys);
7676
expand_test!(destructor_request, {
7777
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
7878
let mut server = server_backend::Backend::new().unwrap();
79-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
79+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
8080
let client = client_backend::Backend::connect(tx).unwrap();
8181

8282
let server_data = Arc::new(ServerData(AtomicBool::new(false)));
@@ -137,7 +137,7 @@ expand_test!(destructor_request, {
137137
expand_test!(destructor_cleanup, {
138138
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
139139
let mut server = server_backend::Backend::new().unwrap();
140-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
140+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
141141
let client = client_backend::Backend::connect(tx).unwrap();
142142

143143
let server_data = Arc::new(ServerData(AtomicBool::new(false)));

wayland-backend/src/test/many_args.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ clientdata_impls!(client_sys);
109109
expand_test!(many_args, {
110110
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
111111
let mut server = server_backend::Backend::new().unwrap();
112-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
112+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
113113
let client = client_backend::Backend::connect(tx).unwrap();
114114

115115
let server_data = Arc::new(ServerData(AtomicBool::new(false)));

wayland-backend/src/test/mod.rs

-12
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,6 @@ fn send_sync_server_sys() {
100100
*/
101101
struct DoNothingData;
102102

103-
// Server Client Data
104-
105-
impl server_rs::ClientData for DoNothingData {
106-
fn initialized(&self, _: server_rs::ClientId) {}
107-
fn disconnected(&self, _: server_rs::ClientId, _: server_rs::DisconnectReason) {}
108-
}
109-
110-
impl server_sys::ClientData for DoNothingData {
111-
fn initialized(&self, _: server_sys::ClientId) {}
112-
fn disconnected(&self, _: server_sys::ClientId, _: server_rs::DisconnectReason) {}
113-
}
114-
115103
// Server Global Handler
116104

117105
impl<D> server_rs::GlobalHandler<D> for DoNothingData {

wayland-backend/src/test/object_args.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ impl_client_objectdata!(client_sys);
122122
expand_test!(create_objects, {
123123
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
124124
let mut server = server_backend::Backend::new().unwrap();
125-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
125+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
126126
let client = client_backend::Backend::connect(tx).unwrap();
127127

128128
let server_data = Arc::new(ServerData(AtomicBool::new(false)));
@@ -222,7 +222,7 @@ expand_test!(create_objects, {
222222
expand_test!(panic bad_interface, {
223223
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
224224
let server = server_backend::Backend::<()>::new().unwrap();
225-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
225+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
226226
let client = client_backend::Backend::connect(tx).unwrap();
227227

228228
let server_data = Arc::new(ServerData(AtomicBool::new(false)));
@@ -282,7 +282,7 @@ expand_test!(panic bad_interface, {
282282
expand_test!(panic double_null, {
283283
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
284284
let server = server_backend::Backend::<()>::new().unwrap();
285-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
285+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
286286
let client = client_backend::Backend::connect(tx).unwrap();
287287

288288
let server_data = Arc::new(ServerData(AtomicBool::new(false)));
@@ -339,7 +339,7 @@ expand_test!(panic double_null, {
339339
expand_test!(null_obj_followed_by_interface, {
340340
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
341341
let server = server_backend::Backend::<()>::new().unwrap();
342-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
342+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
343343
let client = client_backend::Backend::connect(tx).unwrap();
344344

345345
let server_data = Arc::new(ServerData(AtomicBool::new(false)));
@@ -408,7 +408,7 @@ expand_test!(null_obj_followed_by_interface, {
408408
expand_test!(new_id_null_and_non_null, {
409409
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
410410
let mut server = server_backend::Backend::<()>::new().unwrap();
411-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
411+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
412412
let client = client_backend::Backend::connect(tx).unwrap();
413413

414414
let server_data = Arc::new(ServerData(AtomicBool::new(false)));

wayland-backend/src/test/protocol_error.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl server_sys::GlobalHandler<()> for ServerData<server_sys::ObjectId> {
4141
expand_test!(protocol_error, {
4242
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
4343
let mut server = server_backend::Backend::new().unwrap();
44-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
44+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
4545
let client = client_backend::Backend::connect(tx).unwrap();
4646

4747
let object_id = Arc::new(Mutex::new(None));
@@ -113,7 +113,7 @@ expand_test!(protocol_error, {
113113
expand_test!(client_wrong_id, {
114114
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
115115
let mut server = server_backend::Backend::<()>::new().unwrap();
116-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
116+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
117117

118118
let mut socket = BufferedSocket::new(unsafe { Socket::from_raw_fd(tx.into_raw_fd()) });
119119

@@ -139,7 +139,7 @@ expand_test!(client_wrong_id, {
139139
expand_test!(client_wrong_opcode, {
140140
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
141141
let mut server = server_backend::Backend::<()>::new().unwrap();
142-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
142+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
143143

144144
let mut socket = BufferedSocket::new(unsafe { Socket::from_raw_fd(tx.into_raw_fd()) });
145145

@@ -163,7 +163,7 @@ expand_test!(client_wrong_opcode, {
163163
expand_test!(client_wrong_sender, {
164164
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
165165
let mut server = server_backend::Backend::<()>::new().unwrap();
166-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
166+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
167167

168168
let mut socket = BufferedSocket::new(unsafe { Socket::from_raw_fd(tx.into_raw_fd()) });
169169

@@ -245,7 +245,7 @@ impl<D> server_sys::ObjectData<D> for ProtocolErrorServerData {
245245
expand_test!(protocol_error_in_request_without_object_init, {
246246
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
247247
let mut server = server_backend::Backend::new().unwrap();
248-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
248+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
249249
let client = client_backend::Backend::connect(tx).unwrap();
250250

251251
// Prepare a global

wayland-backend/src/test/server_created_objects.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl_client_objectdata!(client_sys);
111111
expand_test!(server_created_object, {
112112
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
113113
let mut server = server_backend::Backend::new().unwrap();
114-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
114+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
115115
let client = client_backend::Backend::connect(tx).unwrap();
116116

117117
let client_data = Arc::new(ClientData(AtomicU32::new(0)));

wayland-backend/src/test/sync.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ impl client_sys::ObjectData for SyncData {
3737
expand_test!(sync, {
3838
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
3939
let mut server = server_backend::Backend::new().unwrap();
40-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
40+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
4141
let client = client_backend::Backend::connect(tx).unwrap();
4242

4343
// send the request
@@ -70,7 +70,7 @@ expand_test!(sync, {
7070
expand_test!(panic test_bad_placeholder, {
7171
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
7272
let mut server = server_backend::Backend::new().unwrap();
73-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
73+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
7474
let client = client_backend::Backend::connect(tx).unwrap();
7575

7676
// send the request
@@ -103,7 +103,7 @@ expand_test!(panic test_bad_placeholder, {
103103
expand_test!(panic test_bad_signature, {
104104
let (tx, rx) = std::os::unix::net::UnixStream::pair().unwrap();
105105
let mut server = server_backend::Backend::new().unwrap();
106-
let _client_id = server.handle().insert_client(rx, Arc::new(DoNothingData)).unwrap();
106+
let _client_id = server.handle().insert_client(rx, Arc::new(())).unwrap();
107107
let client = client_backend::Backend::connect(tx).unwrap();
108108

109109
// send the request

0 commit comments

Comments
 (0)