vyre-libs 0.6.1

vyre Category A library ecosystem - pure-IR compositions over vyre-ops hardware primitives
Documentation
use super::DirectivePayload;

pub(super) fn directive_payloads_bytes(payloads: &[DirectivePayload]) -> usize {
    let mut bytes = payloads
        .len()
        .checked_mul(std::mem::size_of::<DirectivePayload>())
        .unwrap_or(usize::MAX);
    for payload in payloads {
        let dynamic = match payload {
            DirectivePayload::None
            | DirectivePayload::Ifdef { .. }
            | DirectivePayload::IfExpr { .. }
            | DirectivePayload::Else
            | DirectivePayload::Endif
            | DirectivePayload::Other => 0,
            DirectivePayload::Define {
                name, args, body, ..
            } => name
                .len()
                .checked_add(args.len())
                .and_then(|value| value.checked_add(body.len()))
                .unwrap_or(usize::MAX),
            DirectivePayload::Undef { name } => name.len(),
            DirectivePayload::Include { path, .. } => path.len(),
        };
        bytes = bytes.checked_add(dynamic).unwrap_or(usize::MAX);
    }
    bytes
}