use crate::providers::config::ProviderQueryConfig;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CarbonEmission {
pub provider: String,
pub region: String,
pub service: Option<String>,
pub emissions_kg_co2eq: f64,
pub time_period: TimePeriod,
pub metadata: Option<EmissionMetadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimePeriod {
pub start: DateTime<Utc>,
pub end: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmissionMetadata {
pub energy_kwh: Option<f64>,
pub grid_carbon_intensity: Option<f64>,
pub renewable_percentage: Option<f64>,
pub provider_data: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmissionQuery {
pub provider: String,
pub regions: Vec<String>,
pub time_period: TimePeriod,
pub services: Option<Vec<String>>,
pub resources: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_config: Option<ProviderQueryConfig>,
}