use crate::color; use crate::section::{RenderContext, SectionOutput}; pub fn render(ctx: &RenderContext) -> Option { if !ctx.config.sections.cloud_profile.enabled { return None; } // AWS: $AWS_PROFILE (most common) if let Ok(profile) = std::env::var("AWS_PROFILE") { if !profile.is_empty() { return render_cloud(ctx, "aws", &profile); } } // GCP: $CLOUDSDK_CORE_PROJECT or $GCLOUD_PROJECT for var in &["CLOUDSDK_CORE_PROJECT", "GCLOUD_PROJECT"] { if let Ok(project) = std::env::var(var) { if !project.is_empty() { return render_cloud(ctx, "gcp", &project); } } } // Azure: $AZURE_SUBSCRIPTION_ID (lightweight check) if let Ok(sub) = std::env::var("AZURE_SUBSCRIPTION_ID") { if !sub.is_empty() { // Truncate subscription ID — they're long UUIDs let display = if sub.len() > 12 { format!("{}...", &sub[..8]) } else { sub }; return render_cloud(ctx, "az", &display); } } None } fn render_cloud(ctx: &RenderContext, provider: &str, name: &str) -> Option { let raw = format!("{provider}:{name}"); let ansi = if ctx.color_enabled { let provider_color = match provider { "aws" => "\x1b[38;2;255;153;0m", // AWS orange "gcp" => "\x1b[38;2;66;133;244m", // GCP blue "az" => "\x1b[38;2;0;120;212m", // Azure blue _ => color::DIM, }; let reset = color::RESET; let dim = color::DIM; format!("{provider_color}{provider}{reset}{dim}:{reset}{name}") } else { raw.clone() }; Some(SectionOutput { raw, ansi }) }