satteri-plugin-api 0.5.2

Rust plugin trait, typed visitors, and runner for Sätteri
Documentation
//! @generated by `cargo run -p satteri-layout-codegen`. Do not edit by hand.
//!
//! MDAST set-property slot dispatch, compiled from the node registry in
//! `satteri-layout-codegen/src/schema.rs`: maps a settable `(node_type,
//! property)` to its stored `type_data` slot.

/// A settable MDAST `type_data` slot, resolved by [`mdast_prop_slot`].
#[derive(Clone, Copy)]
pub(crate) enum MdastPropSlot {
    /// 8-byte `StringRef` written in place.
    Str { offset: usize },
    /// Single numeric byte.
    U8 { offset: usize },
    /// u32 little-endian scalar.
    U32 { offset: usize },
    /// bool byte (0/1).
    Bool { offset: usize },
    /// Tri-state checked byte: true=1, false=0, null=2.
    CheckedTri { offset: usize },
    /// Byte mapped through an enum value list.
    Enum8 {
        offset: usize,
        values: &'static [&'static str],
    },
}

const REFERENCE_TYPE_VALUES: &[&str] = &["shortcut", "collapsed", "full"];

/// Resolve a settable MDAST property to its stored `type_data` slot.
#[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,
    })
}