Crate carbem

Crate carbem 

Source
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.

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)