use std::collections::{HashMap, HashSet};
use tokio::sync::watch;
use vector_common::config::ComponentKey;
use vector_common::id::Inputs;
use vector_core::config::OutputId;
use vector_core::fanout;
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub struct TapOutput {
    pub output_id: OutputId,
    pub component_kind: &'static str,
    pub component_type: String,
}
#[derive(Debug, Default, Clone)]
pub struct TapResource {
    pub outputs: HashMap<TapOutput, fanout::ControlChannel>,
    pub inputs: HashMap<ComponentKey, Inputs<OutputId>>,
    pub source_keys: Vec<String>,
    pub sink_keys: Vec<String>,
    pub removals: HashSet<ComponentKey>,
}
pub type WatchTx = watch::Sender<TapResource>;
pub type WatchRx = watch::Receiver<TapResource>;