use light_zero_copy::{ZeroCopy, ZeroCopyMut};
use crate::{AnchorDeserialize, AnchorSerialize, TokenError};
#[derive(
Debug,
Clone,
Copy,
Hash,
PartialEq,
Eq,
Default,
AnchorSerialize,
AnchorDeserialize,
ZeroCopy,
ZeroCopyMut,
)]
#[repr(C)]
pub struct TransferFeeAccountExtension {
pub withheld_amount: u64,
}
impl<'a> ZTransferFeeAccountExtensionMut<'a> {
pub fn add_withheld_amount(&mut self, fee: u64) -> Result<(), TokenError> {
let current: u64 = self.withheld_amount.get();
let new_amount = current
.checked_add(fee)
.ok_or(TokenError::ArithmeticOverflow)?;
self.withheld_amount.set(new_amount);
Ok(())
}
}