use crate::Error;
use stripe::{
AccountLink, AccountLinkType, BillingPortalSession, CreateAccountLink,
CreateBillingPortalSession,
};
pub async fn create_account() -> Result<stripe::Account, Error> {
let client = crate::Stripe::client();
let mut params = stripe::CreateAccount::new();
params.type_ = Some(stripe::AccountType::Standard);
let account = stripe::Account::create(client, params).await?;
Ok(account)
}
pub async fn retrieve_account(account_id: &str) -> Result<stripe::Account, Error> {
let client = crate::Stripe::client();
let id: stripe::AccountId = account_id
.parse()
.map_err(|_| Error::Stripe(format!("invalid account id: {account_id}")))?;
let account = stripe::Account::retrieve(client, &id, &[]).await?;
Ok(account)
}
pub async fn create_link(
account_id: &str,
refresh_url: &str,
return_url: &str,
) -> Result<String, Error> {
let client = crate::Stripe::client();
let account: stripe::AccountId = account_id
.parse()
.map_err(|_| Error::Stripe(format!("invalid account id: {account_id}")))?;
let mut params = CreateAccountLink::new(account, AccountLinkType::AccountOnboarding);
params.refresh_url = Some(refresh_url);
params.return_url = Some(return_url);
let link = AccountLink::create(client, params).await?;
Ok(link.url)
}
pub async fn billing_portal_url(customer_id: &str, return_url: &str) -> Result<String, Error> {
let client = crate::Stripe::client();
let customer_id_parsed: stripe::CustomerId = customer_id
.parse()
.map_err(|_| Error::Stripe(format!("invalid customer id: {customer_id}")))?;
let mut params = CreateBillingPortalSession::new(customer_id_parsed);
params.return_url = Some(return_url);
let session = BillingPortalSession::create(client, params).await?;
Ok(session.url)
}