Skip to content

Commit 4e51f95

Browse files
simonwuelkerjdm
andauthored
Mark Router::add_route as deprecated (#367)
* Propagate ipc errors to users of TypedRouterHandle Signed-off-by: Simon Wülker <[email protected]> * Deprecate Router::add_route Signed-off-by: Simon Wülker <[email protected]> * Bump Cargo.toml version Signed-off-by: Simon Wülker <[email protected]> * Use semver-compliant version. Signed-off-by: Josh Matthews <[email protected]> --------- Signed-off-by: Simon Wülker <[email protected]> Signed-off-by: Josh Matthews <[email protected]> Co-authored-by: Josh Matthews <[email protected]>
1 parent 5264d06 commit 4e51f95

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ipc-channel"
3-
version = "0.18.3"
3+
version = "0.19.0"
44
description = "A multiprocess drop-in replacement for Rust channels"
55
authors = ["The Servo Project Developers"]
66
license = "MIT OR Apache-2.0"

src/router.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ impl RouterProxy {
5959

6060
/// Add a new (receiver, callback) pair to the router, and send a wakeup message
6161
/// to the router.
62+
///
63+
/// Consider using [add_typed_route](Self::add_typed_route) instead, which prevents
64+
/// mismatches between the receiver and callback types.
65+
#[deprecated(since = "0.19.0", note = "please use 'add_typed_route' instead")]
6266
pub fn add_route(&self, receiver: OpaqueIpcReceiver, callback: RouterHandler) {
6367
let comm = self.comm.lock().unwrap();
6468

@@ -83,9 +87,11 @@ impl RouterProxy {
8387
{
8488
// Before passing the message on to the callback, turn it into the appropriate type
8589
let modified_callback = move |msg: IpcMessage| {
86-
let typed_message = msg.to::<T>().unwrap();
90+
let typed_message = msg.to::<T>();
8791
callback(typed_message)
8892
};
93+
94+
#[allow(deprecated)]
8995
self.add_route(receiver.to_opaque(), Box::new(modified_callback));
9096
}
9197

@@ -123,7 +129,7 @@ impl RouterProxy {
123129
{
124130
self.add_typed_route(
125131
ipc_receiver,
126-
Box::new(move |message| drop(crossbeam_sender.send(message))),
132+
Box::new(move |message| drop(crossbeam_sender.send(message.unwrap()))),
127133
)
128134
}
129135

@@ -234,4 +240,4 @@ enum RouterMsg {
234240
pub type RouterHandler = Box<dyn FnMut(IpcMessage) + Send>;
235241

236242
/// Like [RouterHandler] but includes the type that will be passed to the callback
237-
pub type TypedRouterHandler<T> = Box<dyn FnMut(T) + Send>;
243+
pub type TypedRouterHandler<T> = Box<dyn FnMut(Result<T, bincode::Error>) + Send>;

src/test.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ fn router_simple_global() {
275275
tx.send(person.clone()).unwrap();
276276

277277
let (callback_fired_sender, callback_fired_receiver) = crossbeam_channel::unbounded::<Person>();
278+
#[allow(deprecated)]
278279
ROUTER.add_route(
279280
rx.to_opaque(),
280281
Box::new(move |person| {
@@ -293,7 +294,7 @@ fn router_simple_global() {
293294
ROUTER.add_typed_route(
294295
rx,
295296
Box::new(move |message| {
296-
callback_fired_sender.send(message).unwrap();
297+
callback_fired_sender.send(message.unwrap()).unwrap();
297298
}),
298299
);
299300
let received_message = callback_fired_receiver.recv().unwrap();
@@ -308,10 +309,10 @@ fn router_simple_global() {
308309
tx.send(person.clone()).unwrap();
309310

310311
let (callback_fired_sender, callback_fired_receiver) = crossbeam_channel::unbounded::<Person>();
311-
ROUTER.add_route(
312-
rx.to_opaque(),
312+
ROUTER.add_typed_route(
313+
rx,
313314
Box::new(move |person| {
314-
callback_fired_sender.send(person.to().unwrap()).unwrap();
315+
callback_fired_sender.send(person.unwrap()).unwrap();
315316
}),
316317
);
317318

@@ -389,8 +390,8 @@ fn router_drops_callbacks_on_sender_shutdown() {
389390
let dropper = Dropper { sender: drop_tx };
390391

391392
let router = RouterProxy::new();
392-
router.add_route(
393-
rx0.to_opaque(),
393+
router.add_typed_route(
394+
rx0,
394395
Box::new(move |_| {
395396
let _ = &dropper;
396397
}),
@@ -416,8 +417,8 @@ fn router_drops_callbacks_on_cloned_sender_shutdown() {
416417
let dropper = Dropper { sender: drop_tx };
417418

418419
let router = RouterProxy::new();
419-
router.add_route(
420-
rx0.to_opaque(),
420+
router.add_typed_route(
421+
rx0,
421422
Box::new(move |_| {
422423
let _ = &dropper;
423424
}),
@@ -441,9 +442,9 @@ fn router_big_data() {
441442
let (callback_fired_sender, callback_fired_receiver) =
442443
crossbeam_channel::unbounded::<Vec<Person>>();
443444
let router = RouterProxy::new();
444-
router.add_route(
445-
rx.to_opaque(),
446-
Box::new(move |people| callback_fired_sender.send(people.to().unwrap()).unwrap()),
445+
router.add_typed_route(
446+
rx,
447+
Box::new(move |people| callback_fired_sender.send(people.unwrap()).unwrap()),
447448
);
448449
let received_people = callback_fired_receiver.recv().unwrap();
449450
assert_eq!(received_people, people);

0 commit comments

Comments
 (0)