Expand description
§Carbem
A Rust library for retrieving carbon emission values from cloud providers.
This library provides both a native Rust API and an FFI layer for use in other languages.
§Rust API (Recommended for Rust applications)
use carbem::{CarbemClient, EmissionQuery, TimePeriod};
use carbem::{ProviderQueryConfig, AzureQueryConfig, AzureReportType};
use chrono::Utc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = CarbemClient::builder()
.with_azure_from_env()?
.build();
let query = EmissionQuery {
provider: "azure".to_string(),
regions: vec!["eastus".to_string(), "westus".to_string()], // location_list
time_period: TimePeriod {
start: Utc::now() - chrono::Duration::days(30),
end: Utc::now(),
},
services: None,
resources: None,
provider_config: Some(ProviderQueryConfig::Azure(AzureQueryConfig {
report_type: AzureReportType::MonthlySummaryReport,
subscription_list: vec!["subscription-id".to_string()],
..Default::default()
})),
};
let emissions = client.query_emissions(&query).await?;
println!("Found {} emissions", emissions.len());
Ok(())
}§FFI API (For Python/TypeScript bindings)
use carbem::get_emissions;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = r#"{"access_token": "your-token"}"#;
let payload = r#"{"start_date": "2024-01-01T00:00:00Z", "end_date": "2024-02-01T00:00:00Z", "regions": ["sub-id"], "services": null, "resources": null}"#;
let emissions = get_emissions("azure", config, payload).await?;
Ok(())
}Re-exports§
pub use error::CarbemError;pub use error::Result;pub use models::CarbonEmission;pub use models::EmissionMetadata;pub use models::EmissionQuery;pub use models::TimePeriod;pub use providers::azure::AzureCarbonScope;pub use providers::azure::AzureConfig;pub use providers::azure::AzureProvider;pub use providers::azure::AzureQueryConfig;pub use providers::azure::AzureReportType;pub use providers::azure::AzureSortDirection;pub use providers::config::ProviderQueryConfig;pub use providers::ibm::IbmConfig;pub use providers::ibm::IbmGroupBy;pub use providers::ibm::IbmProvider;pub use providers::ibm::IbmQueryConfig;pub use ffi::get_emissions;pub use client::*;
Modules§
- client
- Type-safe builder pattern for CarbemClient
- error
- ffi
- Foreign Function Interface (FFI) layer for Python/TypeScript bindings
- models
- providers
- Cloud provider modules for carbon emission data retrieval
Functions§
- get_
emissions_ py - Get carbon emissions from cloud providers (Python-compatible function)