use std::fmt;
use crate::thread::signal::{AcquireFault, ReleaseFault, Signal};
pub trait Receiver: fmt::Debug + Sized {
type Acquire: Into<AcquireFault>;
type Wait;
type Source<'a>: Signal<Error = Self::Wait>
where
Self: 'a;
unsafe fn try_new() -> Result<Self, Self::Acquire>;
fn source(&self) -> Self::Source<'_>;
fn restore(&self) -> Result<(), ReleaseFault>;
}