crossio-core 0.1.0

Core abstractions for the crossio async I/O backend
Documentation
//! Tokens uniquely identify registered sources within a reactor.
use core::fmt;

/// Identifier attached to each registered I/O source.
#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
pub struct Token(usize);

impl Token {
    /// Creates a token from the provided raw usize value.
    pub const fn from_usize(value: usize) -> Self {
        Self(value)
    }

    /// Returns the underlying usize representation.
    pub const fn as_usize(self) -> usize {
        self.0
    }
}

impl From<usize> for Token {
    fn from(value: usize) -> Self {
        Token::from_usize(value)
    }
}

impl From<Token> for usize {
    fn from(token: Token) -> Self {
        token.as_usize()
    }
}

impl fmt::Debug for Token {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_tuple("Token").field(&self.0).finish()
    }
}