use async_trait::async_trait;

use crate::{
    interpret::{InterpretError, Outcome},
    inventory::Inventory,
    topology::oberservability::monitoring::{AlertReceiver, AlertSender},
};

#[async_trait]
pub trait PrometheusApplicationMonitoring<S: AlertSender> {
    async fn install_prometheus(
        &self,
        sender: &S,
        inventory: &Inventory,
        receivers: Option<Vec<Box<dyn AlertReceiver<S>>>>,
    ) -> Result<Outcome, InterpretError>;
}
