Skip to main content

assert_no_sibling_field_collision

Function assert_no_sibling_field_collision 

Source
#[doc(hidden)]
pub const fn assert_no_sibling_field_collision( sibling_cols: &[&str], base: &str, tag: &str, )
Expand description

Compile-time assertion: no element of sibling_cols matches concat!(base, "_", tag).

Called from const _: () blocks emitted by the outer DataFrameRow derive for every nested-enum struct field, complementing the parse-time B1 check in enum_expansion.rs (which is hardcoded to the default tag "variant"). This assertion catches the non-default-tag case at compile time.

sibling_cols is a slice of all flat column names produced by non-Struct sibling fields in the same outer enum. base is the outer field name (e.g. "kind"). tag is the inner enum’s #[dataframe(tag = "...")] value, retrieved via <Inner as DataFramePayloadFields>::TAG.

If tag is empty (structs emit no discriminant column), returns immediately as a no-op.

§Call site (emitted by proc-macro)

const _: () = ::miniextendr_api::markers::assert_no_sibling_field_collision(
    &["id", "other_col", /* … */],
    "kind",
    <Inner as ::miniextendr_api::markers::DataFramePayloadFields>::TAG,
);