Sync wrapper for `mpsc::Receiver`

mpsc::Receiver cannot be Sync since it's methods take &self. Looking at this comment, this looks like an API design mistake.
Considering that, this wrapper type for Receiver should be sound?

use std::sync::mpsc::Receiver;

pub struct ThreadSafeReceiver<T>(Receiver<T>);
impl<T> ThreadSafeReceiver<T> {
  pub fn new(r: Receiver<T>) -> Self { Self(r) }
  pub fn get(&mut self) -> &Receiver<T> { &self.0 }
}
unsafe impl<T> Sync for ThreadSafeReceiver<T> {}

This looks like the unstable std::sync::Exclusive, it should be sound.

1 Like