#[derive(Clone, Copy)]
pub(crate) enum MdastPropSlot {
Str { offset: usize },
U8 { offset: usize },
U32 { offset: usize },
Bool { offset: usize },
CheckedTri { offset: usize },
Enum8 {
offset: usize,
values: &'static [&'static str],
},
}
const REFERENCE_TYPE_VALUES: &[&str] = &["shortcut", "collapsed", "full"];
#[allow(clippy::manual_range_patterns)]
pub(crate) fn mdast_prop_slot(node_type: u8, name: &str) -> Option<MdastPropSlot> {
Some(match (node_type, name) {
(2, "depth") => MdastPropSlot::U8 { offset: 0 },
(5, "start") => MdastPropSlot::U32 { offset: 0 },
(5, "ordered") => MdastPropSlot::Bool { offset: 4 },
(5, "spread") => MdastPropSlot::Bool { offset: 5 },
(6, "checked") => MdastPropSlot::CheckedTri { offset: 0 },
(6, "spread") => MdastPropSlot::Bool { offset: 1 },
(7 | 10 | 13 | 25 | 26 | 102 | 103 | 104, "value") => MdastPropSlot::Str { offset: 0 },
(8, "lang") => MdastPropSlot::Str { offset: 0 },
(8, "meta") => MdastPropSlot::Str { offset: 8 },
(8, "value") => MdastPropSlot::Str { offset: 16 },
(9, "url") => MdastPropSlot::Str { offset: 0 },
(9, "title") => MdastPropSlot::Str { offset: 8 },
(9, "identifier") => MdastPropSlot::Str { offset: 16 },
(9, "label") => MdastPropSlot::Str { offset: 24 },
(15, "url") => MdastPropSlot::Str { offset: 0 },
(15, "title") => MdastPropSlot::Str { offset: 8 },
(16, "url") => MdastPropSlot::Str { offset: 0 },
(16, "alt") => MdastPropSlot::Str { offset: 8 },
(16, "title") => MdastPropSlot::Str { offset: 16 },
(17 | 20, "identifier") => MdastPropSlot::Str { offset: 0 },
(17 | 20, "label") => MdastPropSlot::Str { offset: 8 },
(17 | 20, "referenceType") => MdastPropSlot::Enum8 {
offset: 16,
values: REFERENCE_TYPE_VALUES,
},
(18, "identifier") => MdastPropSlot::Str { offset: 0 },
(18, "label") => MdastPropSlot::Str { offset: 8 },
(18, "referenceType") => MdastPropSlot::Enum8 {
offset: 16,
values: REFERENCE_TYPE_VALUES,
},
(18, "alt") => MdastPropSlot::Str { offset: 20 },
(19, "identifier") => MdastPropSlot::Str { offset: 0 },
(19, "label") => MdastPropSlot::Str { offset: 8 },
(27, "meta") => MdastPropSlot::Str { offset: 0 },
(27, "value") => MdastPropSlot::Str { offset: 8 },
(28, "value") => MdastPropSlot::Str { offset: 8 },
(37, "spread") => MdastPropSlot::Bool { offset: 0 },
(38, "name") => MdastPropSlot::Str { offset: 0 },
(38, "value") => MdastPropSlot::Str { offset: 8 },
(100 | 101, "name") => MdastPropSlot::Str { offset: 0 },
_ => return None,
})
}