kithara_platform/sync/
mpsc.rs1#[cfg(not(target_arch = "wasm32"))]
2pub use std::sync::mpsc::{RecvError, SendError, TryRecvError};
3
4#[cfg(not(target_arch = "wasm32"))]
6#[must_use]
7pub fn channel<T>() -> (Sender<T>, Receiver<T>) {
8 let (tx, rx) = std::sync::mpsc::channel();
9 (Sender(tx), Receiver(rx))
10}
11
12#[cfg(not(target_arch = "wasm32"))]
13pub struct Sender<T>(std::sync::mpsc::Sender<T>);
14
15#[cfg(not(target_arch = "wasm32"))]
16impl<T> Sender<T> {
17 pub fn send_sync(&self, value: T) -> Result<(), SendError<T>> {
23 self.0.send(value)
24 }
25}
26
27#[cfg(not(target_arch = "wasm32"))]
28impl<T> Clone for Sender<T> {
29 fn clone(&self) -> Self {
30 Self(self.0.clone())
31 }
32}
33
34#[cfg(not(target_arch = "wasm32"))]
35pub struct Receiver<T>(std::sync::mpsc::Receiver<T>);
36
37#[cfg(not(target_arch = "wasm32"))]
38impl<T> Receiver<T> {
39 pub fn recv_sync(&self) -> Result<T, RecvError> {
45 self.0.recv()
46 }
47
48 pub fn try_recv(&self) -> Result<T, TryRecvError> {
54 self.0.try_recv()
55 }
56}
57
58#[cfg(target_arch = "wasm32")]
59use wasm_safe_thread::mpsc as wasm_mpsc;
60#[cfg(target_arch = "wasm32")]
61pub use wasm_safe_thread::mpsc::{RecvError, SendError, TryRecvError};
62
63#[cfg(target_arch = "wasm32")]
65#[must_use]
66pub fn channel<T>() -> (Sender<T>, Receiver<T>) {
67 let (tx, rx) = wasm_mpsc::channel();
68 (Sender(tx), Receiver(rx))
69}
70
71#[cfg(target_arch = "wasm32")]
72pub struct Sender<T>(wasm_safe_thread::mpsc::Sender<T>);
73
74#[cfg(target_arch = "wasm32")]
75impl<T> Sender<T> {
76 pub fn send_sync(&self, value: T) -> Result<(), SendError<T>> {
82 self.0.send_sync(value)
83 }
84}
85
86#[cfg(target_arch = "wasm32")]
87impl<T> Clone for Sender<T> {
88 fn clone(&self) -> Self {
89 Self(self.0.clone())
90 }
91}
92
93#[cfg(target_arch = "wasm32")]
94pub struct Receiver<T>(wasm_safe_thread::mpsc::Receiver<T>);
95
96#[cfg(target_arch = "wasm32")]
97impl<T> Receiver<T> {
98 pub async fn recv_async(&self) -> Result<T, RecvError> {
104 self.0.recv_async().await
105 }
106
107 pub fn recv_sync(&self) -> Result<T, RecvError> {
113 self.0.recv_sync()
114 }
115
116 pub fn try_recv(&self) -> Result<T, TryRecvError> {
122 self.0.try_recv()
123 }
124}