Skip to main content

sendfun_sdk/utils/
token.rs

1#[must_use]
2pub fn parse_token_amount(data: &[u8]) -> Option<u64> {
3	const AMOUNT_OFFSET: usize = 64; // mint (32) + owner (32)
4	let bytes: [u8; 8] = data
5		.get(AMOUNT_OFFSET..AMOUNT_OFFSET + 8)?
6		.try_into()
7		.ok()?;
8	Some(u64::from_le_bytes(bytes))
9}
10
11#[cfg(test)]
12mod tests {
13	use super::parse_token_amount;
14
15	#[test]
16	fn parse_token_amount_correct_offset() {
17		let mut data = vec![0u8; 165];
18		let expected: u64 = 1_000_000_000;
19		data[64..72].copy_from_slice(&expected.to_le_bytes());
20		assert_eq!(parse_token_amount(&data), Some(expected));
21	}
22
23	#[test]
24	fn parse_token_amount_too_short() {
25		let data = vec![0u8; 60];
26		assert_eq!(parse_token_amount(&data), None);
27	}
28}