#[cfg(feature = "cloud-gcs")]
use excelstream::cloud::GCSExcelWriter;
#[cfg(feature = "cloud-gcs")]
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🚀 ExcelStream GCS Direct Streaming Example (v0.14.0)");
println!(" Using s-zip's cloud support - NO TEMP FILES!\n");
let bucket = std::env::var("GCS_BUCKET").unwrap_or_else(|_| "my-excel-reports".to_string());
let object = "reports/monthly_sales_2024.xlsx";
println!("📍 Target: gs://{}/{}", bucket, object);
println!();
println!("⏳ Creating GCS Excel writer...");
let mut writer = GCSExcelWriter::builder()
.bucket(&bucket)
.object(object)
.build()
.await?;
println!("✅ GCS writer initialized (using s-zip's GCSZipWriter)\n");
println!("📝 Writing header row...");
writer
.write_header_bold(["Month", "Product", "Sales", "Profit"])
.await?;
println!("📊 Writing sales data...");
let months = ["January", "February", "March", "April", "May", "June"];
let products = ["Laptop", "Phone", "Tablet", "Monitor", "Keyboard"];
let mut row_count = 0;
for month in &months {
for product in &products {
let sales = (row_count * 1000 + 5000) as f64;
let profit = sales * 0.25;
let sales_str = format!("{:.2}", sales);
let profit_str = format!("{:.2}", profit);
writer
.write_row([*month, *product, &sales_str, &profit_str])
.await?;
row_count += 1;
}
}
println!("✅ Wrote {} rows\n", row_count);
println!("☁️ Streaming to GCS (completing multipart upload)...");
writer.save().await?;
println!("✅ Upload complete!\n");
println!("🎉 File available at: gs://{}/{}", bucket, object);
println!("\n💡 Features:");
println!(" ✅ ZERO disk usage (no temp files!)");
println!(" ✅ Constant ~4 KB memory for buffering");
println!(" ✅ Uses s-zip 0.6.0 cloud support");
println!(" ✅ Async streaming with tokio");
println!("\n🔍 Verify with:");
println!(" gsutil ls -l gs://{}/{}", bucket, object);
println!(
" gsutil cp gs://{}/{} . && unzip -l {}",
bucket,
object,
object.split('/').next_back().unwrap()
);
Ok(())
}
#[cfg(not(feature = "cloud-gcs"))]
fn main() {
eprintln!("❌ This example requires the 'cloud-gcs' feature.");
eprintln!("\nRun with:");
eprintln!(" cargo run --example gcs_streaming --features cloud-gcs");
eprintln!("\nMake sure you have GCP credentials configured:");
eprintln!(" # Option 1: gcloud CLI");
eprintln!(" gcloud auth application-default login");
eprintln!("\n # Option 2: Service account");
eprintln!(" export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json");
eprintln!("\n # Set bucket");
eprintln!(" export GCS_BUCKET=your-bucket-name");
std::process::exit(1);
}