pub mod azure;
pub mod config;
pub mod ibm;
pub mod registry;
use crate::error::Result;
use crate::models::{CarbonEmission, EmissionQuery};
use async_trait::async_trait;
#[async_trait]
pub trait CarbonProvider: Send + Sync {
fn name(&self) -> &'static str;
async fn get_emissions(&self, query: &EmissionQuery) -> Result<Vec<CarbonEmission>>;
fn is_configured(&self) -> bool;
fn clone_provider(&self) -> Box<dyn CarbonProvider + Send + Sync>;
}