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}