dope-net 0.37.0

Owned network transports for dope
use crate::link::egress::{self, load::credit, metadata::batch};

#[derive(Clone, Copy, Eq, PartialEq)]
#[repr(transparent)]
pub struct Plan(credit::Amount);

impl Plan {
    pub const fn new(
        entries: egress::Entries,
        resident: egress::Resident,
    ) -> Result<Self, batch::Empty> {
        if entries.is_empty() {
            return Err(batch::Empty);
        }
        Ok(Self(credit::Amount::new(entries, resident)))
    }

    pub(in crate::link::egress) const fn amount(self) -> credit::Amount {
        self.0
    }
}

const _: () = assert!(std::mem::size_of::<Plan>() == std::mem::size_of::<u64>());