sark-h2 0.29.4

Fiber-free HTTP/2 protocol primitives and manifold server for sark
use sark_http::field::metadata::block;

use crate::hpack::decode::limit;

mod input;
mod prepared;
pub(in crate::conn::ingress) mod sink;

pub(crate) use input::Input;
pub(crate) use prepared::{Prepared, Reset};

#[repr(u8)]
#[derive(Clone, Copy)]
pub(crate) enum Validation {
    Valid,
    Rejected {
        admit: limit::Admission,
        sealed: block::Validation,
        finished: block::Validation,
    },
}

impl Validation {
    pub(in crate::conn::ingress) fn new(
        admit: limit::Admission,
        sealed: block::Validation,
        finished: block::Validation,
    ) -> Self {
        match (admit, sealed, finished) {
            (limit::Admission::Admitted, block::Validation::Valid, block::Validation::Valid) => {
                Self::Valid
            }
            (admit, sealed, finished) => Self::Rejected {
                admit,
                sealed,
                finished,
            },
        }
    }
}

const _: () = assert!(std::mem::size_of::<Validation>() == 4 * std::mem::size_of::<bool>());