use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Details {}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Error {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub details: Option<Details>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub message: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct ErrorResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<Error>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct TaskResponse {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum Role {
#[serde(rename = "BUSINESS_ADMIN")]
BusinessAdmin,
#[serde(rename = "BUSINESS_BOOKKEEPER")]
BusinessBookkeeper,
#[serde(rename = "BUSINESS_OWNER")]
BusinessOwner,
#[serde(rename = "BUSINESS_USER")]
BusinessUser,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for Role {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Role::BusinessAdmin => "BUSINESS_ADMIN",
Role::BusinessBookkeeper => "BUSINESS_BOOKKEEPER",
Role::BusinessOwner => "BUSINESS_OWNER",
Role::BusinessUser => "BUSINESS_USER",
Role::Noop => "",
Role::FallthroughString => "*",
}
.fmt(f)
}
}
impl Role {
pub fn is_noop(&self) -> bool {
matches!(self, Role::Noop)
}
}
#[derive(Serialize, Default, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct User {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub amount_limit: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub business_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub department_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub email: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub first_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub last_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub location_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub manager_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub phone: String,
#[serde(default, skip_serializing_if = "Role::is_noop")]
pub role: Role,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PatchUsersRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub department_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub direct_manager_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub location_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<Role>,
}
#[derive(Serialize, Default, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Page {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub next: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct CardHolder {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub department_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub department_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub first_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub last_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub location_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub location_name: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct AccountingCategories {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub category_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub category_name: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum Type {
#[serde(rename = "POLICY_VIOLATION_FROM_ADMIN")]
PolicyViolationFromAdmin,
#[serde(rename = "POLICY_VIOLATION_FROM_USER")]
PolicyViolationFromUser,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for Type {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Type::PolicyViolationFromAdmin => "POLICY_VIOLATION_FROM_ADMIN",
Type::PolicyViolationFromUser => "POLICY_VIOLATION_FROM_USER",
Type::Noop => "",
Type::FallthroughString => "*",
}
.fmt(f)
}
}
impl Type {
pub fn is_noop(&self) -> bool {
matches!(self, Type::Noop)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PolicyViolations {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub memo: String,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
pub type_: Option<Type>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum GetTransactionResponseDataDisputesType {
#[serde(rename = "DISPUTE_CANCELLED")]
DisputeCancelled,
#[serde(rename = "MERCHANT_ERROR")]
MerchantError,
#[serde(rename = "UNKNOWN")]
Unknown,
#[serde(rename = "UNRECOGNIZED_CHARGE")]
UnrecognizedCharge,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for GetTransactionResponseDataDisputesType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
GetTransactionResponseDataDisputesType::DisputeCancelled => "DISPUTE_CANCELLED",
GetTransactionResponseDataDisputesType::MerchantError => "MERCHANT_ERROR",
GetTransactionResponseDataDisputesType::Unknown => "UNKNOWN",
GetTransactionResponseDataDisputesType::UnrecognizedCharge => "UNRECOGNIZED_CHARGE",
GetTransactionResponseDataDisputesType::Noop => "",
GetTransactionResponseDataDisputesType::FallthroughString => "*",
}
.fmt(f)
}
}
impl GetTransactionResponseDataDisputesType {
pub fn is_noop(&self) -> bool {
matches!(self, GetTransactionResponseDataDisputesType::Noop)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Disputes {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub memo: String,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
pub type_: Option<GetTransactionResponseDataDisputesType>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Data {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub accounting_categories: Vec<AccountingCategories>,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub amount: f64,
pub card_holder: CardHolder,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub card_id: String,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub disputes: Vec<Disputes>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub memo: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub merchant_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub merchant_name: String,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub policy_violations: Vec<PolicyViolations>,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub receipts: Vec<String>,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub sk_category_id: f64,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub sk_category_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub state: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub user_transaction_time: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetTransactionResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<Data>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Location {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub name: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetLocationResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<Location>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostLocationRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub name: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetUsersResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<User>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Department {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub name: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetDepartmentsResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<Department>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct RecipientAddress {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize",
rename = "address1"
)]
pub address_1: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub city: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub country: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub first_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub last_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub postal_code: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub state: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Shipping {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub recipient_address: Option<RecipientAddress>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Fulfillment {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shipping: Option<Shipping>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum Interval {
#[serde(rename = "DAILY")]
Daily,
#[serde(rename = "MONTHLY")]
Monthly,
#[serde(rename = "TOTAL")]
Total,
#[serde(rename = "YEARLY")]
Yearly,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for Interval {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Interval::Daily => "DAILY",
Interval::Monthly => "MONTHLY",
Interval::Total => "TOTAL",
Interval::Yearly => "YEARLY",
Interval::Noop => "",
Interval::FallthroughString => "*",
}
.fmt(f)
}
}
impl Interval {
pub fn is_noop(&self) -> bool {
matches!(self, Interval::Noop)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct SpendingRestrictions {
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub amount: f64,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub blocked_categories: Vec<f64>,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub categories: Vec<f64>,
#[serde(default, skip_serializing_if = "Interval::is_noop")]
pub interval: Interval,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub lock_date: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub suspended: bool,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub transaction_amount_limit: f64,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Card {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub card_program_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub cardholder_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub cardholder_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fulfillment: Option<Fulfillment>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub is_physical: bool,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub last_four: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spending_restrictions: Option<SpendingRestrictions>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetCardsResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub cards: Vec<Card>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PatchResourcesCardsCardRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub card_program_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub has_notifications_enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spending_restrictions: Option<SpendingRestrictions>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetCustomProviderResponse {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub custom_id_provider: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostcustomProviderResponse {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub provider_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct BillingAddress {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize",
rename = "address1"
)]
pub address_1: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub city: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub country: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub postal_code: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub state: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Business {
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub active: bool,
pub billing_address: BillingAddress,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub business_memo_required_threshold: f64,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub business_name_legal: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub business_name_on_card: String,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub business_receipt_required_threshold: f64,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub created_time: String,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub enforce_sso: bool,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub initial_approved_limit: f64,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub is_integrated_with_slack: bool,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub is_reimbursements_enabled: bool,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub limit_locked: bool,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub phone: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub website: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostResourcesCardPhysicalRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub card_program_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fulfillment: Option<Fulfillment>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub idempotency_key: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spending_restrictions: Option<SpendingRestrictions>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub user_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostResourcesCardVirtualRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub card_program_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub idempotency_key: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spending_restrictions: Option<SpendingRestrictions>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub user_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum TokenType {
#[serde(rename = "Bearer")]
Bearer,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for TokenType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
TokenType::Bearer => "Bearer",
TokenType::Noop => "",
TokenType::FallthroughString => "*",
}
.fmt(f)
}
}
impl TokenType {
pub fn is_noop(&self) -> bool {
matches!(self, TokenType::Noop)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct OAuth2Token {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub access_token: String,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_i64",
deserialize_with = "crate::utils::deserialize_null_i64::deserialize"
)]
pub expires_in: i64,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub refresh_token: String,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_i64",
deserialize_with = "crate::utils::deserialize_null_i64::deserialize"
)]
pub refresh_token_expires_in: i64,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub scope: String,
#[serde(default, skip_serializing_if = "TokenType::is_noop")]
pub token_type: TokenType,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct BusinessCurrentStatus {
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub balance_including_pending: f64,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub max_balance: f64,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_format::deserialize"
)]
pub next_billing_date: Option<chrono::NaiveDate>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_format::deserialize"
)]
pub prev_billing_date: Option<chrono::NaiveDate>,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub statement_balance: f64,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostResourcesCardsCardSuspensionRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub idempotency_key: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetEntityTypeCustomRampResponse {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub ramp_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetEntityTypeRampCustomResponse {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub custom_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetResourcesCardsDeferredResponseData {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub card_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub error: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub misc: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum Status {
#[serde(rename = "ERROR")]
Error,
#[serde(rename = "IN_PROGRESS")]
InProgress,
#[serde(rename = "STARTED")]
Started,
#[serde(rename = "SUCCESS")]
Success,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for Status {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Status::Error => "ERROR",
Status::InProgress => "IN_PROGRESS",
Status::Started => "STARTED",
Status::Success => "SUCCESS",
Status::Noop => "",
Status::FallthroughString => "*",
}
.fmt(f)
}
}
impl Status {
pub fn is_noop(&self) -> bool {
matches!(self, Status::Noop)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetResourcesCardsDeferredResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data: Option<GetResourcesCardsDeferredResponseData>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<Status>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema, Default)]
pub enum Icon {
#[serde(rename = "AdvertisingIcon")]
AdvertisingIcon,
#[serde(rename = "CardIcon")]
CardIcon,
#[serde(rename = "EducationStipendIcon")]
EducationStipendIcon,
#[serde(rename = "LunchOrderingIcon")]
LunchOrderingIcon,
#[serde(rename = "OnboardingIcon")]
OnboardingIcon,
#[serde(rename = "PerDiemCardIcon")]
PerDiemCardIcon,
#[serde(rename = "SaasSubscriptionIcon")]
SaasSubscriptionIcon,
#[serde(rename = "SoftwareTrialIcon")]
SoftwareTrialIcon,
#[serde(rename = "TravelExpensesIcon")]
TravelExpensesIcon,
#[serde(rename = "WellnessIcon")]
WellnessIcon,
#[serde(rename = "")]
#[default]
Noop,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for Icon {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Icon::AdvertisingIcon => "AdvertisingIcon",
Icon::CardIcon => "CardIcon",
Icon::EducationStipendIcon => "EducationStipendIcon",
Icon::LunchOrderingIcon => "LunchOrderingIcon",
Icon::OnboardingIcon => "OnboardingIcon",
Icon::PerDiemCardIcon => "PerDiemCardIcon",
Icon::SaasSubscriptionIcon => "SaasSubscriptionIcon",
Icon::SoftwareTrialIcon => "SoftwareTrialIcon",
Icon::TravelExpensesIcon => "TravelExpensesIcon",
Icon::WellnessIcon => "WellnessIcon",
Icon::Noop => "",
Icon::FallthroughString => "*",
}
.fmt(f)
}
}
impl Icon {
pub fn is_noop(&self) -> bool {
matches!(self, Icon::Noop)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct CardProgram {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub description: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub icon: Option<Icon>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub is_default: bool,
#[serde(
default,
deserialize_with = "crate::utils::deserialize_null_boolean::deserialize"
)]
pub is_physical: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spending_restrictions: Option<SpendingRestrictions>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetCardProgramsResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize",
rename = "card-programs"
)]
pub card_programs: Vec<CardProgram>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostResourcesCardProgramRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub description: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(default, skip_serializing_if = "Icon::is_noop")]
pub icon: Icon,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_default: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_physical: Option<bool>,
pub spending_restrictions: SpendingRestrictions,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostUsersDeferredRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub department_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub direct_manager_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub email: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub first_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub last_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub location_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub phone: String,
#[serde(default, skip_serializing_if = "Role::is_noop")]
pub role: Role,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetUsersDeferredStatusResponseData {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub error: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub misc: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub user_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetUsersDeferredStatusResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data: Option<GetUsersDeferredStatusResponseData>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub status: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetUsersDeferredStatusResponseDataType {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<Error>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Receipt {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub receipt_url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub transaction_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub user_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetReceiptsResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<Receipt>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Reimbursement {
#[serde(
default,
skip_serializing_if = "crate::utils::zero_f64",
deserialize_with = "crate::utils::deserialize_null_f64::deserialize"
)]
pub amount: f64,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub currency: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub merchant: String,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub receipts: Vec<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_format::deserialize"
)]
pub transaction_date: Option<chrono::NaiveDate>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub user_id: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetReimbursementsResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<Reimbursement>,
#[serde(default)]
pub page: Page,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct PostCustomProviderEntityTypeLinkRequest {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub custom_id: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub ramp_id: String,
}