use crate::{MatchId, StateId, http2::parser::types::http2_action};
pub const S_DEAD: StateId = StateId(2);
pub const S_FIELD: StateId = StateId(3);
pub const S_KEY_LEN: StateId = StateId(4);
pub const S_VAL_LEN: StateId = StateId(5);
pub const S_NAME: StateId = StateId(6);
pub const S_IDX7_CONT: StateId = StateId(7);
pub const S_IDX6_CONT: StateId = StateId(8);
pub const S_IDX4_CONT: StateId = StateId(9);
pub const S_STG_CONT: StateId = StateId(10);
pub const S_KEY_LEN_CONT: StateId = StateId(11);
pub const S_KEY_LEN_CONT_HUFF: StateId = StateId(12);
pub const S_VAL_LEN_CONT: StateId = StateId(13);
pub const S_VAL_LEN_CONT_HUFF: StateId = StateId(14);
pub const S_RESERVED: u16 = 15;
pub const F_HUFF: u8 = 1 << 0;
pub const F_ADD_DT: u8 = 1 << 1;
pub const F_CONT: u8 = 1 << 2;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum Kind {
Indexed = 1,
IdxName,
LitName,
KeyLen,
ValLen,
TableSize,
IntStart,
IntCont,
Capture,
Err,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct Action {
pub kind: Kind,
pub val: u16,
pub flags: u8,
}
impl Action {
pub const fn new(kind: Kind, val: u16, flags: u8) -> Action {
Action { kind, val, flags }
}
pub const fn capture(mid: MatchId) -> Action {
Action::new(Kind::Capture, mid.0 as u16, 0)
}
}
impl From<Action> for http2_action {
fn from(value: Action) -> Self {
http2_action {
val: value.val,
kind: value.kind as u8,
flags: value.flags,
}
}
}