use rust_decimal_macros::dec;
use wave_claw::inputs::{InvoiceCreateInput, InvoiceCreateItemInput};
use wave_claw::{OAuthConfig, WaveClient};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv().ok();
let client = WaveClient::with_oauth(OAuthConfig {
client_id: std::env::var("WAVE_CLIENT_ID")?,
client_secret: std::env::var("WAVE_CLIENT_SECRET")?,
access_token: std::env::var("WAVE_ACCESS_TOKEN")?,
refresh_token: std::env::var("WAVE_REFRESH_TOKEN")?,
redirect_uri: std::env::var("WAVE_REDIRECT_URI")
.unwrap_or_else(|_| "http://localhost:3099/callback".into()),
on_token_refresh: None,
});
let business_id = std::env::var("WAVE_BUSINESS_ID")?;
let customer_id = std::env::var("WAVE_CUSTOMER_ID")?;
let product_id = std::env::var("WAVE_PRODUCT_ID")?;
let input = InvoiceCreateInput::new(&business_id, &customer_id)
.items(vec![
InvoiceCreateItemInput::new(&product_id)
.quantity(dec!(2))
.unit_price(dec!(49.99)),
])
.memo("Thank you for your business!");
let invoice = client.create_invoice(input).await?;
println!("Created invoice #{} ({})", invoice.invoice_number, invoice.id);
println!(" Status: {:?}", invoice.status);
println!(" Total: {} {}", invoice.total.value, invoice.total.currency.symbol);
println!(" PDF: {}", invoice.pdf_url);
Ok(())
}