df-derive-macros 0.3.0

Procedural derive macro implementation for df-derive.
Documentation
use quote::ToTokens;

pub fn bare_binary_u8<S: ToTokens + ?Sized>(span: &S, field_display_name: &str) -> syn::Error {
    syn::Error::new_spanned(
        span,
        format!(
            "field `{field_display_name}` has `as_binary` but its type is a single `u8`; \
             `as_binary` requires a `Vec<u8>` shape — bare `u8` is a single byte, not \
             a binary blob. Wrap the field in `Vec<u8>` to opt into Binary."
        ),
    )
}

pub fn binary_inner_option<S: ToTokens + ?Sized>(span: &S, field_display_name: &str) -> syn::Error {
    syn::Error::new_spanned(
        span,
        format!(
            "field `{field_display_name}` has `as_binary` but the wrapper stack places an \
             `Option` between the `Vec` and the `u8` leaf; BinaryView cannot carry \
             per-byte nulls. Use `Vec<u8>` directly (drop the inner `Option`)."
        ),
    )
}

pub fn binary_wrong_base<S: ToTokens + ?Sized>(span: &S, field_display_name: &str) -> syn::Error {
    syn::Error::new_spanned(
        span,
        format!(
            "field `{field_display_name}` has `as_binary` but its base type is not `u8`; \
             `as_binary` requires a `Vec<u8>` shape (the innermost `Vec` becomes the \
             Binary blob). Change the field type or drop the attribute."
        ),
    )
}

pub fn binary_cow_slice<S: ToTokens + ?Sized>(span: &S, field_display_name: &str) -> syn::Error {
    syn::Error::new_spanned(
        span,
        format!(
            "field `{field_display_name}` has `as_binary` on `Cow<'_, [T]>`, but \
             `as_binary` only supports `Cow<'_, [u8]>`; use `Vec<T>` for list columns"
        ),
    )
}

pub fn binary_borrowed_slice<S: ToTokens + ?Sized>(
    span: &S,
    field_display_name: &str,
) -> syn::Error {
    syn::Error::new_spanned(
        span,
        format!(
            "field `{field_display_name}` has `as_binary` on `&[T]`, but \
             `as_binary` only supports `&[u8]`; use `Vec<T>` for list columns"
        ),
    )
}