//! Macros that should be exported from both `darling_core` and `darling`. //! Note that these are **sym-linked** into the main code, and so cannot declare on items that are exported differently //! in `darling_core` vs. `darling`.
/// Generator for `UsesTypeParam` impls that unions the used type parameters of the selected fields. /// /// # Usage /// The macro takes the type implementing the trait as the first argument, then a comma-separated list of /// fields for the rest of its arguments. /// /// The type of each passed-in field must implement `UsesTypeParams`, or the resulting code won't compile. /// /// ```rust /// # extern crate syn; /// # use darling_core::uses_type_params; /// # /// struct MyField { /// ty: syn::Type, /// } /// /// uses_type_params!(MyField, ty); /// /// fn main() { /// // no test run /// } /// ``` /// /// `darling` cannot derive this trait automatically, as it doesn't know which information extracted from /// proc-macro input is meant to constitute "using" the type parameter, but crate consumers should /// implement it by hand or using the macro. #[macro_export]
macro_rules! uses_type_params {
($impl_type:ty, $accessor:ident) => { impl $crate::usage::UsesTypeParams for $impl_type { fn uses_type_params<'gen>(
&self,
options: &$crate::usage::Options,
type_set: &'gen $crate::usage::IdentSet
) -> $crate::usage::IdentRefSet<'gen> { self.$accessor.uses_type_params(options, type_set)
}
}
};
($impl_type:ty, $first:ident, $($field:ident),+) => { impl $crate::usage::UsesTypeParams for $impl_type { fn uses_type_params<'gen>(
&self,
options: &$crate::usage::Options,
type_set: &'gen $crate::usage::IdentSet
) -> $crate::usage::IdentRefSet<'gen> { letmut hits = self.$first.uses_type_params(options, type_set);
$(
hits.extend(self.$field.uses_type_params(options, type_set));
)*
hits
}
}
};
}
/// Generator for `UsesLifetimes` impls that unions the used lifetimes of the selected fields. /// /// # Usage /// The macro takes the type implementing the trait as the first argument, then a comma-separated list of /// fields for the rest of its arguments. /// /// The type of each passed-in field must implement `UsesLifetimes`, or the resulting code won't compile. #[macro_export]
macro_rules! uses_lifetimes {
($impl_type:ty, $accessor:ident) => { impl $crate::usage::UsesLifetimes for $impl_type { fn uses_lifetimes<'gen>(
&self,
options: &$crate::usage::Options,
type_set: &'gen $crate::usage::LifetimeSet
) -> $crate::usage::LifetimeRefSet<'gen> { self.$accessor.uses_lifetimes(options, type_set)
}
}
};
($impl_type:ty, $first:ident, $($field:ident),+) => { impl $crate::usage::UsesLifetimes for $impl_type { fn uses_lifetimes<'gen>(
&self,
options: &$crate::usage::Options,
type_set: &'gen $crate::usage::LifetimeSet
) -> $crate::usage::LifetimeRefSet<'gen> { letmut hits = self.$first.uses_lifetimes(options, type_set);
$(
hits.extend(self.$field.uses_lifetimes(options, type_set));
)*
hits
}
}
};
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-23)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.