light_token_interface/state/extensions/
transfer_fee.rs1use light_zero_copy::{ZeroCopy, ZeroCopyMut};
2
3use crate::{AnchorDeserialize, AnchorSerialize, TokenError};
4
5#[derive(
9 Debug,
10 Clone,
11 Copy,
12 Hash,
13 PartialEq,
14 Eq,
15 Default,
16 AnchorSerialize,
17 AnchorDeserialize,
18 ZeroCopy,
19 ZeroCopyMut,
20)]
21#[repr(C)]
22pub struct TransferFeeAccountExtension {
23 pub withheld_amount: u64,
25}
26
27impl<'a> ZTransferFeeAccountExtensionMut<'a> {
28 pub fn add_withheld_amount(&mut self, fee: u64) -> Result<(), TokenError> {
31 let current: u64 = self.withheld_amount.get();
32 let new_amount = current
33 .checked_add(fee)
34 .ok_or(TokenError::ArithmeticOverflow)?;
35 self.withheld_amount.set(new_amount);
36 Ok(())
37 }
38}