use flowglad::types::customer::{CreateCustomer, UpdateCustomer};
use flowglad::{Client, Config};
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key =
env::var("FLOWGLAD_API_KEY").expect("FLOWGLAD_API_KEY environment variable must be set");
let config = Config::new(api_key);
let client = Client::new(config)?;
println!("🚀 FlowGlad Customer API Example\n");
let timestamp = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)?
.as_secs();
let external_id = format!("example_user_{}", timestamp);
println!("1️⃣ Creating a new customer...");
let customer = client
.customers()
.create(
CreateCustomer::new(&external_id, "Jane Doe")
.email(&format!("jane+{}@example.com", timestamp))
.phone("+1-555-0123"),
)
.await?;
println!(" ✓ Created customer:");
println!(" - ID: {}", customer.id);
println!(" - External ID: {}", customer.external_id);
println!(" - Name: {}", customer.name.as_ref().unwrap());
println!(" - Email: {}", customer.email.as_ref().unwrap());
println!();
println!("2️⃣ Retrieving customer by external ID...");
let retrieved = client.customers().get(&external_id).await?;
println!(" ✓ Retrieved customer:");
println!(" - ID: {}", retrieved.id);
println!(" - Name: {}", retrieved.name.as_ref().unwrap());
println!();
println!("3️⃣ Updating customer information...");
let updated = client
.customers()
.update(
&external_id,
UpdateCustomer::new()
.name("Jane Smith")
.email(&format!("jane.smith+{}@example.com", timestamp)),
)
.await?;
println!(" ✓ Updated customer:");
println!(" - New name: {}", updated.name.as_ref().unwrap());
println!(" - New email: {}", updated.email.as_ref().unwrap());
println!();
println!("4️⃣ Listing all customers...");
let list = client.customers().list().await?;
println!(" ✓ Found {} customers", list.len());
if let Some(has_more) = list.has_more {
if has_more {
println!(" (More customers available via pagination)");
}
}
println!();
println!("5️⃣ Fetching billing details...");
let billing = client.customers().get_billing(&external_id).await?;
println!(" ✓ Billing details:");
println!(
" - Subscriptions: {}",
billing.subscriptions.len() + billing.current_subscriptions.len()
);
println!(" - Invoices: {}", billing.invoices.len());
println!(" - Payment methods: {}", billing.payment_methods.len());
if let Some(portal_url) = billing.billing_portal_url {
println!(" - Portal URL: {}", portal_url);
}
println!("\n✨ Example completed successfully!");
Ok(())
}