macro_rules! setup_interned_struct {
(
// Attributes on the struct
attrs: [$(#[$attr:meta]),*],
// Visibility of the struct
vis: $vis:vis,
// Name of the struct
Struct: $Struct:ident,
// Name of the struct data. This is a parameter because `std::concat_idents`
// is unstable and taking an additional dependency is unnecessary.
StructData: $StructDataIdent:ident,
// Name of the struct type with a `'static` argument (unless this type has no db lifetime,
// in which case this is the same as `$Struct`)
StructWithStatic: $StructWithStatic:ty,
// Name of the `'db` lifetime that the user gave
db_lt: $db_lt:lifetime,
// optional db lifetime argument.
db_lt_arg: $($db_lt_arg:lifetime)?,
// the salsa ID
id: $Id:path,
// the lifetime used in the desugared interned struct.
// if the `db_lt_arg`, is present, this is `db_lt_arg`, but otherwise,
// it is `'static`.
interior_lt: $interior_lt:lifetime,
// Name user gave for `new`
new_fn: $new_fn:ident,
// A series of option tuples; see `setup_tracked_struct` macro
field_options: [$($field_option:tt),*],
// Field names
field_ids: [$($field_id:ident),*],
// Names for field setter methods (typically `set_foo`)
field_getters: [$($field_getter_vis:vis $field_getter_id:ident),*],
// Field types
field_tys: [$($field_ty:ty),*],
// Indices for each field from 0..N -- must be unsuffixed (e.g., `0`, `1`).
field_indices: [$($field_index:tt),*],
// Indexed types for each field (T0, T1, ...)
field_indexed_tys: [$($indexed_ty:ident),*],
// Number of fields
num_fields: $N:literal,
// If true, generate a debug impl.
generate_debug_impl: $generate_debug_impl:tt,
// 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,
]
) => { ... };
}Expand description
Macro for setting up a function that must intern its arguments.