use std::mem;
use crate::{
driver::route,
io::{self, event},
};
#[repr(transparent)]
pub struct Completion<'d> {
targeted: event::Targeted<io::SocketEvent<'d>>,
}
const _: () = {
assert!(
mem::size_of::<Completion<'static>>()
== mem::size_of::<(route::Token, io::SocketEvent<'static>)>()
);
assert!(
mem::align_of::<Completion<'static>>()
== mem::align_of::<(route::Token, io::SocketEvent<'static>)>()
);
};
impl<'d> Completion<'d> {
pub(in crate::io) const fn new(token: route::Token, event: io::SocketEvent<'d>) -> Self {
Self {
targeted: event::Targeted::new(token, event),
}
}
pub const fn token(&self) -> route::Token {
self.targeted.token()
}
pub const fn event(&self) -> &io::SocketEvent<'d> {
self.targeted.value()
}
pub fn into_parts(self) -> (route::Token, io::SocketEvent<'d>) {
self.targeted.into_parts()
}
}