macro_rules! setup_tracked_struct {
(
// Attributes on the function.
attrs: [$(#[$attr:meta]),*],
// Visibility of the struct.
vis: $vis:vis,
// Name of the struct.
Struct: $Struct:ident,
// Name of the `'db` lifetime that the user gave.
db_lt: $db_lt:lifetime,
// Name user gave for `new`.
new_fn: $new_fn:ident,
// Field names.
field_ids: [$($field_id:ident),*],
// Tracked field names.
tracked_ids: [$($tracked_id:ident),*],
// Visibility and names of tracked fields.
tracked_getters: [$($tracked_getter_vis:vis $tracked_getter_id:ident),*],
// Visibility and names of untracked fields.
untracked_getters: [$($untracked_getter_vis:vis $untracked_getter_id:ident),*],
// Field types, may reference `db_lt`.
field_tys: [$($field_ty:ty),*],
// Tracked field types.
tracked_tys: [$($tracked_ty:ty),*],
// Untracked field types.
untracked_tys: [$($untracked_ty:ty),*],
// Indices for each field from 0..N -- must be unsuffixed (e.g., `0`, `1`).
field_indices: [$($field_index:tt),*],
// Absolute indices of any tracked fields, relative to all other fields of this struct.
absolute_tracked_indices: [$($absolute_tracked_index:tt),*],
// Indices of any tracked fields, relative to only tracked fields on this struct.
relative_tracked_indices: [$($relative_tracked_index:tt),*],
// Absolute indices of any untracked fields.
absolute_untracked_indices: [$($absolute_untracked_index:tt),*],
// Tracked field types.
tracked_maybe_updates: [$($tracked_maybe_update:tt),*],
// Untracked field types.
untracked_maybe_updates: [$($untracked_maybe_update:tt),*],
// A set of "field options" for each tracked field.
//
// Each field option is a tuple `(return_mode, maybe_default)` where:
//
// * `return_mode` is an identifier as specified in `salsa_macros::options::Option::returns`
// * `maybe_default` is either the identifier `default` or `required`
//
// These are used to drive conditional logic for each field via recursive macro invocation
// (see e.g. @return_mode below).
tracked_options: [$($tracked_option:tt),*],
// A set of "field options" for each untracked field.
// (see docs for `tracked_options`).
untracked_options: [$($untracked_option:tt),*],
// Attrs for each field.
tracked_field_attrs: [$([$(#[$tracked_field_attr:meta]),*]),*],
untracked_field_attrs: [$([$(#[$untracked_field_attr:meta]),*]),*],
// Number of tracked fields.
num_tracked_fields: $N:literal,
// If true, generate a debug impl.
generate_debug_impl: $generate_debug_impl:tt,
// The function used to implement `C::heap_size`.
heap_size_fn: $($heap_size_fn:path)?,
// If `true`, `serialize_fn` and `deserialize_fn` have been provided.
persist: $persist:tt,
// The path to the `serialize` function for the value's fields.
serialize_fn: $($serialize_fn:path)?,
// The path to the `serialize` function for the value's fields.
deserialize_fn: $($deserialize_fn:path)?,
// Annoyingly macro-rules hygiene does not extend to items defined in the macro.
// We have the procedural macro generate names for those items that are
// not used elsewhere in the user's code.
unused_names: [
$zalsa:ident,
$zalsa_struct:ident,
$Configuration:ident,
$CACHE:ident,
$Db:ident,
$Revision:ident,
]
) => { ... };
}Expand description
Macro for setting up a function that must intern its arguments.