s2n_quic_core/sync/
spsc.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3
4mod recv;
5mod send;
6mod slice;
7mod state;
8
9use slice::*;
10use state::*;
11
12pub use recv::{Receiver, RecvSlice};
13pub use send::{SendSlice, Sender};
14
15#[inline]
16pub fn channel<T>(capacity: usize) -> (Sender<T>, Receiver<T>) {
17    let state = State::new(capacity);
18    let sender = Sender(state.clone());
19    let receiver = Receiver(state);
20    (sender, receiver)
21}
22
23#[cfg(test)]
24mod tests;
25
26type Result<T, E = ClosedError> = core::result::Result<T, E>;
27
28#[derive(Clone, Copy, Debug)]
29pub struct ClosedError;
30
31#[derive(Clone, Copy, Debug)]
32pub enum PushError<T> {
33    Full(T),
34    Closed,
35}
36
37impl<T> From<ClosedError> for PushError<T> {
38    fn from(_error: ClosedError) -> Self {
39        Self::Closed
40    }
41}