1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use enum_dispatch::enum_dispatch;
use vector_lib::configurable::NamedComponent;

use crate::{providers::BuildResult, signal};

/// Generalized interface for constructing a configuration from a provider.
#[enum_dispatch]
pub trait ProviderConfig: NamedComponent + core::fmt::Debug + Send + Sync {
    /// Builds a configuration.
    ///
    /// Access to signal handling is given so that the provider can control reloading and shutdown
    /// behavior as necessary.
    ///
    /// If a configuration is built successfully, `Ok(...)` is returned containing the
    /// configuration.
    ///
    /// # Errors
    ///
    /// If an error occurs while building a configuration, an error variant explaining the
    /// issue is returned.
    async fn build(&mut self, signal_handler: &mut signal::SignalHandler) -> BuildResult;
}