use serde::{Deserialize, Serialize};
use super::{bool_from_int_default_false, PayrixId};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
#[serde(rename_all = "camelCase")]
pub struct Fund {
pub id: PayrixId,
#[serde(default)]
pub created: Option<String>,
#[serde(default)]
pub modified: Option<String>,
#[serde(default)]
pub creator: Option<PayrixId>,
#[serde(default)]
pub modifier: Option<PayrixId>,
#[serde(default)]
pub entity: Option<PayrixId>,
#[serde(default)]
pub currency: Option<String>,
#[serde(default)]
pub reserved: Option<f64>,
#[serde(default)]
pub pending: Option<f64>,
#[serde(default)]
pub available: Option<f64>,
#[serde(default)]
pub total: Option<f64>,
#[serde(default, with = "bool_from_int_default_false")]
pub inactive: bool,
#[serde(default, with = "bool_from_int_default_false")]
pub frozen: bool,
#[cfg(not(feature = "sqlx"))]
#[serde(default)]
pub entity_reserves: Option<Vec<serde_json::Value>>,
#[cfg(not(feature = "sqlx"))]
#[serde(default)]
pub entries: Option<Vec<serde_json::Value>>,
#[cfg(not(feature = "sqlx"))]
#[serde(default)]
pub reserve_entries: Option<Vec<serde_json::Value>>,
#[cfg(not(feature = "sqlx"))]
#[serde(default)]
pub fund_origins: Option<Vec<serde_json::Value>>,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum DisbursementStatus {
#[default]
Requested = 1,
Processing = 2,
Processed = 3,
Failed = 4,
Denied = 5,
Returned = 6,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum DisbursementCode {
#[default]
Pending,
Internal,
#[serde(rename = "nsf")]
Nsf,
BadAccount,
Unauthorized,
General,
#[serde(rename = "noc")]
Noc,
Parameter,
SameDay,
TransferDetails,
Platform,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum PayoutSchedule {
Daily = 1,
Weekly = 2,
Monthly = 3,
Annually = 4,
#[default]
Single = 5,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum PayoutUnit {
Percent = 1,
#[default]
Actual = 2,
PercentNegative = 3,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum FeeType {
#[default]
Fee = 1,
Assessment = 2,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum FeeRuleType {
#[serde(rename = "AVSRESULT")]
AvsResult,
#[serde(rename = "BIN")]
Bin,
#[serde(rename = "BUSINESS")]
Business,
#[serde(rename = "CVVRESULT")]
CvvResult,
#[serde(rename = "CORPORATE")]
Corporate,
#[serde(rename = "DYNAMICALLYROUTED")]
DynamicallyRouted,
#[serde(rename = "EMV")]
Emv,
#[serde(rename = "ENTITY")]
Entity,
#[serde(rename = "EQUAL")]
Equal,
#[serde(rename = "FRAUDSIGHTENABLED")]
FraudSightEnabled,
#[serde(rename = "FUNDINGCURRENCYEQUAL")]
FundingCurrencyEqual,
#[serde(rename = "FUNDINGCURRENCYNOTEQUAL")]
FundingCurrencyNotEqual,
#[serde(rename = "FUNDINGCURRENCYMISMATCH")]
FundingCurrencyMismatch,
#[serde(rename = "FUNDINGENABLED")]
FundingEnabled,
#[serde(rename = "GREATER")]
Greater,
#[serde(rename = "IMPORTED")]
Imported,
#[serde(rename = "INTERCHANGE")]
Interchange,
#[serde(rename = "INTERNATIONAL")]
International,
#[serde(rename = "ISSUERCOUNTRY")]
IssuerCountry,
#[serde(rename = "LESS")]
Less,
#[serde(rename = "MCC")]
Mcc,
#[serde(rename = "MERCHANTCOUNTRY")]
MerchantCountry,
#[default]
#[serde(rename = "METHOD", alias = "method")]
Method,
#[serde(rename = "METHODTYPE")]
MethodType,
#[serde(rename = "MISUSE")]
Misuse,
#[serde(rename = "NOTEQUAL")]
NotEqual,
#[serde(rename = "ORIGIN")]
Origin,
#[serde(rename = "OMNITOKENSENABLED")]
OmnitokensEnabled,
#[serde(rename = "PLATFORM")]
Platform,
#[serde(rename = "RELATED")]
Related,
#[serde(rename = "RELATEDCEIL")]
RelatedCeil,
#[serde(rename = "RELATEDDELAY")]
RelatedDelay,
#[serde(rename = "RELATEDFLOOR")]
RelatedFloor,
#[serde(rename = "SAMEDAY")]
SameDay,
#[serde(rename = "SETTLEDCURRENCYMISMATCH")]
SettledCurrencyMismatch,
#[serde(rename = "SIGNED")]
Signed,
#[serde(rename = "SUBSCRIPTION")]
Subscription,
#[serde(rename = "SWIPED")]
Swiped,
#[serde(rename = "TAXFORM1099K")]
TaxForm1099K,
#[serde(rename = "TYPE")]
Type,
#[serde(rename = "3DSRESULT")]
ThreeDsResult,
#[serde(rename = "STATUS")]
Status,
#[serde(rename = "IC_RETAIN_PASSTHRU_REFUND")]
IcRetainPassthruRefund,
#[serde(rename = "SOFTPOS")]
SoftPos,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum FeeApplication {
#[default]
Both,
Fee,
Collection,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum FeeUnit {
Percent = 1,
#[default]
Fixed = 2,
Surcharge = 3,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum FeeCollection {
#[default]
Transaction = 1,
TransactionTaxId = 2,
TransactionMerchant = 3,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde_repr::Serialize_repr, serde_repr::Deserialize_repr,
)]
#[repr(i32)]
pub enum FeeSchedule {
#[default]
Days = 1,
Weeks = 2,
Months = 3,
Years = 4,
Single = 5,
Auth = 6,
Capture = 7,
Refund = 8,
Board = 9,
Payout = 10,
Chargeback = 11,
Overdraft = 12,
Interchange = 13,
Processor = 14,
AchFailure = 15,
Account = 16,
Sift = 17,
Adjustment = 18,
Retrieval = 19,
Arbitration = 20,
EcheckSale = 21,
EcheckRefund = 22,
EcheckReturn = 23,
Settlement = 24,
Misuse = 25,
ProfitShare = 26,
Unauth = 27,
DisbursementNoc = 28,
TransactionNoc = 29,
EcheckFailureReturn = 30,
EcheckNsfReturn = 31,
CurrencyConversion = 32,
TerminalTransaction = 33,
ReversePayout = 34,
PartialReversePayout = 35,
PaymentCheck = 43,
PaymentUpdate = 44,
PaymentGroupCheck = 45,
PaymentGroupUpdate = 46,
EntryRefund = 47,
StatementPayment = 51,
MerchantCreated = 52,
RealtimeBusinessSearch = 53,
RealtimeMemberSearch = 54,
MasterCardMatch = 55,
BusinessInstantId = 56,
ConsumerInstantId = 57,
ThreatMetrix = 58,
LegitScriptRegistration = 59,
EquifaxConsumerReport = 60,
CharityCheck = 61,
InternalDecisionV2 = 62,
TinCheck = 63,
EquifaxCommercialReport = 64,
LegitScriptMerchantCheck = 65,
Plaid = 66,
StatementReversal = 67,
GiactEcheckVerification = 68,
GiactAccountVerification = 69,
BoardingDecision = 70,
TransactionRiskDecision = 71,
Fanf = 72,
McLocation = 73,
VisaIntegrity = 74,
SaferPaymentsBasic = 75,
SaferPaymentsManaged = 76,
SaferPaymentsPciNonValidation = 77,
OmnitokensVolume = 78,
PayoutReturn = 79,
PayoutPartialReturn = 80,
RevenueShare = 81,
CardSettlement = 82,
EcheckSettlement = 83,
RevenueShareFromCard = 84,
RevenueShareFromEcheck = 85,
RevenueSharePayout = 86,
PlaidIdentityMatch = 88,
TxnPlaidIdentityMatch = 89,
PlaidGetIdentity = 90,
TxnPlaidGetIdentity = 91,
PlaidGetAuth = 92,
TxnPlaidGetAuth = 93,
OmnitokensMonthly = 96,
ValutecEssentialGift = 200,
ValutecEssentialMonthlyTxn = 201,
ValutecDigitalGiftPlusPackage = 202,
ValutecDigitalGiftPlusPackageTxn = 203,
ValutecLoyaltyPlusPackage = 204,
ValutecLoyaltyPlusPackageTxn = 205,
ValutecTransactionFee = 206,
ValutecSetupFee = 207,
ValutecGiftAchPooling = 208,
ValutecJumpStartKit = 209,
ValutecLaunchBoxKit = 210,
Valutec500CustomCards = 211,
ValutecMaintenanceFee = 212,
ValutecDigitalGiftPlusPackageMe = 213,
EfeMwcResidualAtelio = 214,
EfeMwcResidualParafin = 215,
EfeMwcBilling = 216,
FraudsightCnpDecision = 217,
FraudsightCpDecision = 218,
ValutecOverageTransactionFee = 230,
ValutecStandardMobilePassMonthlyApple = 231,
ValutecNfcMobilePassMonthly = 232,
ValutecStandardMobilePassMonthlyGoogle = 233,
ValutecOnlineGiftWebsiteMonthly = 234,
ValutecMarketing360Monthly = 235,
ValutecOnlineGiftCardVolumeFee = 236,
ValutecSocialSharingMonthly = 237,
ValutecDigicardMonthly = 238,
ValutecLoyaltyStandardMonthly = 239,
ValutecAutoRewardsLprMonthly = 240,
ValutecOnecardSetupFee = 241,
ValutecOnecardMonthlyFee = 242,
ValutecMonthlyFeeChoice = 243,
ValutecSystemAccess = 244,
ValutecTransaction = 245,
ValutecMonthlyFeeLaunchbox = 246,
ValutecMonthlyFeeJumpstart = 247,
ValutecOnecardPhysicalFulfillmentFee = 248,
ValutecOnecardVirtualFulfillmentFee = 249,
ValutecCustomizedReporting = 250,
ValutecTransactionFileFeed = 251,
Valutec250CustomCards = 252,
Valutec1000CustomCards = 253,
Valutec2500CustomCards = 254,
Valutec5000CustomCards = 255,
Valutec10000CustomCards = 256,
Valutec15000CustomCards = 257,
Valutec20000CustomCards = 258,
Valutec25000CustomCards = 259,
Valutec250ExpressCards = 260,
Valutec500ExpressCards = 261,
Valutec1000ExpressCards = 262,
Valutec2500ExpressCards = 263,
Valutec5000ExpressCards = 264,
Valutec10000ExpressCards = 265,
ValutecSpecialtyCards = 266,
ValutecKeytags = 267,
ValutecSleevesCarriersHangers = 268,
ValutecSignaturePanel = 269,
Valutec4x4Printing = 270,
ValutecSpecialtyFinish = 271,
ValutecPantone = 272,
ValutecPinScratch = 273,
ValutecMerchandise = 274,
ValutecGiftCardDesignSetupFee = 275,
ValutecShippingHandling = 276,
ValutecRushFees = 277,
ValutecSequencing = 278,
ValutecWholesaleFulfillmentFee = 279,
ValutecMiscellaneousFees = 280,
ValutecHostingFee = 281,
ValutecStorecardMonthlyFee = 282,
ValutecGiftAchFeeMonthly = 283,
ValutecOnecardMonthlyFeeStorecard = 284,
RevboostEmbeddedTmsMonthly = 400,
RevboostEmbeddedTmsPpt = 401,
TxnThreatMetrix = 402,
ThreatMetrixEmailage = 403,
ThreatMetrixFraudPoint = 404,
GiactInquiry = 405,
GiactTxnGauthenticate = 406,
TruliooIdv = 407,
TruliooAmlldv = 408,
TruliooBusinessVerification = 409,
ThreatMetrixPhoneFinder = 410,
TierNonQualifiedCount = 601,
TierQualifiedCount = 602,
TierMidQualifiedCount = 603,
TierHighRiskCount = 604,
TierNonQualifiedVolume = 605,
TierQualifiedVolume = 606,
TierMidQualifiedVolume = 607,
TierHighRiskVolume = 608,
NyceAnnualFee = 701,
PulseAnnualFee = 702,
Cu24AnnualFee = 703,
StarAnnualFee = 704,
AccelAnnualFee = 705,
IngenicoLink2500 = 801,
IngenicoLane3600Std = 802,
IngenicoLane3600Dlx = 803,
IngenicoLane7000Std = 804,
IngenicoLane7000Dlx = 805,
IngenicoMove5000 = 806,
PayrixEquipmentSetupFee = 807,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum BatchStatus {
#[default]
Open,
Processed,
Closed,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn fund_deserialize_full() {
let json = r#"{
"id": "t1_fnd_12345678901234567890123",
"created": "2024-01-01 00:00:00.0000",
"modified": "2024-04-01 12:00:00.0000",
"creator": "t1_lgn_12345678901234567890123",
"modifier": "t1_lgn_12345678901234567890124",
"entity": "t1_ent_12345678901234567890123",
"currency": "USD",
"reserved": 5000.0,
"pending": 25000.5,
"available": 100000.0,
"total": 130000.5,
"inactive": 0,
"frozen": 0
}"#;
let fund: Fund = serde_json::from_str(json).unwrap();
assert_eq!(fund.id.as_str(), "t1_fnd_12345678901234567890123");
assert_eq!(fund.creator.as_ref().map(|c| c.as_str()), Some("t1_lgn_12345678901234567890123"));
assert_eq!(fund.modifier.as_ref().map(|m| m.as_str()), Some("t1_lgn_12345678901234567890124"));
assert_eq!(fund.currency, Some("USD".to_string()));
assert_eq!(fund.available, Some(100000.0));
assert_eq!(fund.pending, Some(25000.5));
assert_eq!(fund.reserved, Some(5000.0));
assert_eq!(fund.total, Some(130000.5));
assert!(!fund.inactive);
assert!(!fund.frozen);
}
#[test]
fn fund_deserialize_minimal() {
let json = r#"{"id": "t1_fnd_12345678901234567890123"}"#;
let fund: Fund = serde_json::from_str(json).unwrap();
assert_eq!(fund.id.as_str(), "t1_fnd_12345678901234567890123");
assert!(fund.creator.is_none());
assert!(fund.available.is_none());
assert!(!fund.inactive);
}
#[test]
fn fund_bool_from_int() {
let json = r#"{"id": "t1_fnd_12345678901234567890123", "inactive": 1, "frozen": 1}"#;
let fund: Fund = serde_json::from_str(json).unwrap();
assert!(fund.inactive);
assert!(fund.frozen);
}
#[test]
fn fund_fractional_cents() {
let json = r#"{
"id": "t1_fnd_12345678901234567890123",
"available": 100000.123,
"pending": 25000.456,
"total": 125000.579
}"#;
let fund: Fund = serde_json::from_str(json).unwrap();
assert_eq!(fund.available, Some(100000.123));
assert_eq!(fund.pending, Some(25000.456));
assert_eq!(fund.total, Some(125000.579));
}
#[test]
fn disbursement_status_serialize_all_variants() {
assert_eq!(serde_json::to_string(&DisbursementStatus::Requested).unwrap(), "1");
assert_eq!(serde_json::to_string(&DisbursementStatus::Processing).unwrap(), "2");
assert_eq!(serde_json::to_string(&DisbursementStatus::Processed).unwrap(), "3");
assert_eq!(serde_json::to_string(&DisbursementStatus::Failed).unwrap(), "4");
assert_eq!(serde_json::to_string(&DisbursementStatus::Denied).unwrap(), "5");
assert_eq!(serde_json::to_string(&DisbursementStatus::Returned).unwrap(), "6");
}
#[test]
fn disbursement_status_deserialize_all_variants() {
assert_eq!(
serde_json::from_str::<DisbursementStatus>("1").unwrap(),
DisbursementStatus::Requested
);
assert_eq!(
serde_json::from_str::<DisbursementStatus>("2").unwrap(),
DisbursementStatus::Processing
);
assert_eq!(
serde_json::from_str::<DisbursementStatus>("3").unwrap(),
DisbursementStatus::Processed
);
assert_eq!(
serde_json::from_str::<DisbursementStatus>("4").unwrap(),
DisbursementStatus::Failed
);
assert_eq!(
serde_json::from_str::<DisbursementStatus>("5").unwrap(),
DisbursementStatus::Denied
);
assert_eq!(
serde_json::from_str::<DisbursementStatus>("6").unwrap(),
DisbursementStatus::Returned
);
}
#[test]
fn disbursement_status_default() {
assert_eq!(DisbursementStatus::default(), DisbursementStatus::Requested);
}
#[test]
fn disbursement_code_serialize_all_variants() {
assert_eq!(serde_json::to_string(&DisbursementCode::Pending).unwrap(), "\"pending\"");
assert_eq!(serde_json::to_string(&DisbursementCode::Internal).unwrap(), "\"internal\"");
assert_eq!(serde_json::to_string(&DisbursementCode::Nsf).unwrap(), "\"nsf\"");
assert_eq!(serde_json::to_string(&DisbursementCode::BadAccount).unwrap(), "\"badAccount\"");
assert_eq!(serde_json::to_string(&DisbursementCode::Unauthorized).unwrap(), "\"unauthorized\"");
assert_eq!(serde_json::to_string(&DisbursementCode::General).unwrap(), "\"general\"");
assert_eq!(serde_json::to_string(&DisbursementCode::Noc).unwrap(), "\"noc\"");
assert_eq!(serde_json::to_string(&DisbursementCode::Parameter).unwrap(), "\"parameter\"");
assert_eq!(serde_json::to_string(&DisbursementCode::SameDay).unwrap(), "\"sameDay\"");
assert_eq!(serde_json::to_string(&DisbursementCode::TransferDetails).unwrap(), "\"transferDetails\"");
assert_eq!(serde_json::to_string(&DisbursementCode::Platform).unwrap(), "\"platform\"");
}
#[test]
fn disbursement_code_deserialize_all_variants() {
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"pending\"").unwrap(),
DisbursementCode::Pending
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"internal\"").unwrap(),
DisbursementCode::Internal
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"nsf\"").unwrap(),
DisbursementCode::Nsf
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"badAccount\"").unwrap(),
DisbursementCode::BadAccount
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"unauthorized\"").unwrap(),
DisbursementCode::Unauthorized
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"general\"").unwrap(),
DisbursementCode::General
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"noc\"").unwrap(),
DisbursementCode::Noc
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"parameter\"").unwrap(),
DisbursementCode::Parameter
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"sameDay\"").unwrap(),
DisbursementCode::SameDay
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"transferDetails\"").unwrap(),
DisbursementCode::TransferDetails
);
assert_eq!(
serde_json::from_str::<DisbursementCode>("\"platform\"").unwrap(),
DisbursementCode::Platform
);
}
#[test]
fn disbursement_code_default() {
assert_eq!(DisbursementCode::default(), DisbursementCode::Pending);
}
#[test]
fn payout_schedule_serialize_all_variants() {
assert_eq!(serde_json::to_string(&PayoutSchedule::Daily).unwrap(), "1");
assert_eq!(serde_json::to_string(&PayoutSchedule::Weekly).unwrap(), "2");
assert_eq!(serde_json::to_string(&PayoutSchedule::Monthly).unwrap(), "3");
assert_eq!(serde_json::to_string(&PayoutSchedule::Annually).unwrap(), "4");
assert_eq!(serde_json::to_string(&PayoutSchedule::Single).unwrap(), "5");
}
#[test]
fn payout_schedule_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<PayoutSchedule>("1").unwrap(), PayoutSchedule::Daily);
assert_eq!(serde_json::from_str::<PayoutSchedule>("2").unwrap(), PayoutSchedule::Weekly);
assert_eq!(serde_json::from_str::<PayoutSchedule>("3").unwrap(), PayoutSchedule::Monthly);
assert_eq!(serde_json::from_str::<PayoutSchedule>("4").unwrap(), PayoutSchedule::Annually);
assert_eq!(serde_json::from_str::<PayoutSchedule>("5").unwrap(), PayoutSchedule::Single);
}
#[test]
fn payout_schedule_default() {
assert_eq!(PayoutSchedule::default(), PayoutSchedule::Single);
}
#[test]
fn payout_unit_serialize_all_variants() {
assert_eq!(serde_json::to_string(&PayoutUnit::Percent).unwrap(), "1");
assert_eq!(serde_json::to_string(&PayoutUnit::Actual).unwrap(), "2");
assert_eq!(serde_json::to_string(&PayoutUnit::PercentNegative).unwrap(), "3");
}
#[test]
fn payout_unit_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<PayoutUnit>("1").unwrap(), PayoutUnit::Percent);
assert_eq!(serde_json::from_str::<PayoutUnit>("2").unwrap(), PayoutUnit::Actual);
assert_eq!(serde_json::from_str::<PayoutUnit>("3").unwrap(), PayoutUnit::PercentNegative);
}
#[test]
fn payout_unit_default() {
assert_eq!(PayoutUnit::default(), PayoutUnit::Actual);
}
#[test]
fn fee_type_serialize_all_variants() {
assert_eq!(serde_json::to_string(&FeeType::Fee).unwrap(), "1");
assert_eq!(serde_json::to_string(&FeeType::Assessment).unwrap(), "2");
}
#[test]
fn fee_type_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<FeeType>("1").unwrap(), FeeType::Fee);
assert_eq!(serde_json::from_str::<FeeType>("2").unwrap(), FeeType::Assessment);
}
#[test]
fn fee_type_default() {
assert_eq!(FeeType::default(), FeeType::Fee);
}
#[test]
fn fee_rule_type_serialize_common_variants() {
assert_eq!(serde_json::to_string(&FeeRuleType::Method).unwrap(), "\"METHOD\"");
assert_eq!(serde_json::to_string(&FeeRuleType::Bin).unwrap(), "\"BIN\"");
assert_eq!(serde_json::to_string(&FeeRuleType::AvsResult).unwrap(), "\"AVSRESULT\"");
assert_eq!(serde_json::to_string(&FeeRuleType::Business).unwrap(), "\"BUSINESS\"");
assert_eq!(serde_json::to_string(&FeeRuleType::CvvResult).unwrap(), "\"CVVRESULT\"");
assert_eq!(serde_json::to_string(&FeeRuleType::Interchange).unwrap(), "\"INTERCHANGE\"");
assert_eq!(serde_json::to_string(&FeeRuleType::International).unwrap(), "\"INTERNATIONAL\"");
assert_eq!(serde_json::to_string(&FeeRuleType::Mcc).unwrap(), "\"MCC\"");
}
#[test]
fn fee_rule_type_deserialize_common_variants() {
assert_eq!(serde_json::from_str::<FeeRuleType>("\"METHOD\"").unwrap(), FeeRuleType::Method);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"BIN\"").unwrap(), FeeRuleType::Bin);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"AVSRESULT\"").unwrap(), FeeRuleType::AvsResult);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"BUSINESS\"").unwrap(), FeeRuleType::Business);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"CVVRESULT\"").unwrap(), FeeRuleType::CvvResult);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"INTERCHANGE\"").unwrap(), FeeRuleType::Interchange);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"INTERNATIONAL\"").unwrap(), FeeRuleType::International);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"MCC\"").unwrap(), FeeRuleType::Mcc);
}
#[test]
fn fee_rule_type_deserialize_special_variants() {
assert_eq!(serde_json::from_str::<FeeRuleType>("\"3DSRESULT\"").unwrap(), FeeRuleType::ThreeDsResult);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"IC_RETAIN_PASSTHRU_REFUND\"").unwrap(), FeeRuleType::IcRetainPassthruRefund);
assert_eq!(serde_json::from_str::<FeeRuleType>("\"TAXFORM1099K\"").unwrap(), FeeRuleType::TaxForm1099K);
}
#[test]
fn fee_rule_type_default() {
assert_eq!(FeeRuleType::default(), FeeRuleType::Method);
}
#[test]
fn fee_application_serialize_all_variants() {
assert_eq!(serde_json::to_string(&FeeApplication::Both).unwrap(), "\"both\"");
assert_eq!(serde_json::to_string(&FeeApplication::Fee).unwrap(), "\"fee\"");
assert_eq!(serde_json::to_string(&FeeApplication::Collection).unwrap(), "\"collection\"");
}
#[test]
fn fee_application_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<FeeApplication>("\"both\"").unwrap(), FeeApplication::Both);
assert_eq!(serde_json::from_str::<FeeApplication>("\"fee\"").unwrap(), FeeApplication::Fee);
assert_eq!(serde_json::from_str::<FeeApplication>("\"collection\"").unwrap(), FeeApplication::Collection);
}
#[test]
fn fee_application_default() {
assert_eq!(FeeApplication::default(), FeeApplication::Both);
}
#[test]
fn fee_unit_serialize_all_variants() {
assert_eq!(serde_json::to_string(&FeeUnit::Percent).unwrap(), "1");
assert_eq!(serde_json::to_string(&FeeUnit::Fixed).unwrap(), "2");
assert_eq!(serde_json::to_string(&FeeUnit::Surcharge).unwrap(), "3");
}
#[test]
fn fee_unit_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<FeeUnit>("1").unwrap(), FeeUnit::Percent);
assert_eq!(serde_json::from_str::<FeeUnit>("2").unwrap(), FeeUnit::Fixed);
assert_eq!(serde_json::from_str::<FeeUnit>("3").unwrap(), FeeUnit::Surcharge);
}
#[test]
fn fee_unit_default() {
assert_eq!(FeeUnit::default(), FeeUnit::Fixed);
}
#[test]
fn fee_collection_serialize_all_variants() {
assert_eq!(serde_json::to_string(&FeeCollection::Transaction).unwrap(), "1");
assert_eq!(serde_json::to_string(&FeeCollection::TransactionTaxId).unwrap(), "2");
assert_eq!(serde_json::to_string(&FeeCollection::TransactionMerchant).unwrap(), "3");
}
#[test]
fn fee_collection_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<FeeCollection>("1").unwrap(), FeeCollection::Transaction);
assert_eq!(serde_json::from_str::<FeeCollection>("2").unwrap(), FeeCollection::TransactionTaxId);
assert_eq!(serde_json::from_str::<FeeCollection>("3").unwrap(), FeeCollection::TransactionMerchant);
}
#[test]
fn fee_collection_default() {
assert_eq!(FeeCollection::default(), FeeCollection::Transaction);
}
#[test]
fn batch_status_serialize_all_variants() {
assert_eq!(serde_json::to_string(&BatchStatus::Open).unwrap(), "\"open\"");
assert_eq!(serde_json::to_string(&BatchStatus::Closed).unwrap(), "\"closed\"");
}
#[test]
fn batch_status_deserialize_all_variants() {
assert_eq!(serde_json::from_str::<BatchStatus>("\"open\"").unwrap(), BatchStatus::Open);
assert_eq!(serde_json::from_str::<BatchStatus>("\"closed\"").unwrap(), BatchStatus::Closed);
}
#[test]
fn batch_status_default() {
assert_eq!(BatchStatus::default(), BatchStatus::Open);
}
}