vector_common_macros/
lib.rs

1#![deny(warnings)]
2
3use proc_macro::TokenStream;
4
5mod internal_event;
6
7/// Derives `NamedInternalEvent` so `InternalEvent::name()` returns a stable
8/// compile-time identifier for the event type.
9///
10/// Apply this derive to any struct that also implements `InternalEvent` or `RegisterInternalEvent`:
11///
12/// ```ignore
13/// use vector_lib::internal_event::{InternalEvent, NamedInternalEvent};
14///
15/// #[derive(Debug, NamedInternalEvent)]
16/// pub struct UdpSendIncompleteError {
17///     pub data_size: usize,
18///     pub sent: usize,
19/// }
20///
21/// impl InternalEvent for UdpSendIncompleteError {
22///     fn emit(self) {
23///         // ... emit metrics/logging ...
24///     }
25/// }
26///
27/// // Later, `UdpSendIncompleteError::name()` returns the string "UdpSendIncompleteError".
28/// ```
29///
30/// Notes:
31/// - Works with lifetimes and generics.
32/// - The generated implementation returns `stringify!(TypeName)` which avoids
33///   compiler-version-dependent module paths.
34#[proc_macro_derive(NamedInternalEvent)]
35pub fn derive_internal_event_name(input: TokenStream) -> TokenStream {
36    internal_event::derive_impl_named_internal_event(input)
37}