use std::mem;
use crate::driver::{life::native::request, retained::flight, route, route::kind};
pub(crate) struct Bound<'d, R = request::Lowered, C: kind::Class = kind::Any> {
raw: R,
reservation: flight::Reserved<'d, C>,
}
impl<'d, R, C: kind::Class> Bound<'d, R, C> {
pub(crate) fn new<Tag: route::Tag>(raw: R, vacancy: flight::Vacant<'_, 'd, Tag, C>) -> Self {
Self {
raw,
reservation: vacancy.reserve(),
}
}
pub(in crate::driver::life::native::request) fn into_parts(
self,
) -> (R, flight::Reserved<'d, C>) {
(self.raw, self.reservation)
}
}
impl<'d, C: kind::Class> Bound<'d, request::Datagram<'d>, C> {
pub(crate) fn into_raw(self) -> Bound<'d, request::Lowered, C> {
Bound {
raw: self.raw.into_inner(),
reservation: self.reservation,
}
}
}
const _: () = {
assert!(
mem::size_of::<Bound<'static>>()
== mem::size_of::<(request::Lowered, flight::Reserved<'static>,)>()
);
assert!(
mem::align_of::<Bound<'static>>()
== mem::align_of::<(request::Lowered, flight::Reserved<'static>,)>()
);
};