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;
}