spl_account_compression/
zero_copy.rs

1//! Implements ZeroCopy over ConcurrrentMerkleTree generics
2use crate::error::error_msg;
3use anchor_lang::prelude::*;
4use bytemuck::Pod;
5use spl_concurrent_merkle_tree::concurrent_merkle_tree::ConcurrentMerkleTree;
6use std::mem::size_of;
7
8pub trait ZeroCopy: Pod {
9    fn load_mut_bytes<'a>(data: &'a mut [u8]) -> Result<&'a mut Self> {
10        let size = size_of::<Self>();
11        let data_len = data.len();
12
13        Ok(bytemuck::try_from_bytes_mut(&mut data[..size])
14            .map_err(error_msg::<Self>(data_len))
15            .unwrap())
16    }
17
18    fn load_bytes<'a>(data: &'a [u8]) -> Result<&'a Self> {
19        let size = size_of::<Self>();
20        let data_len = data.len();
21
22        Ok(bytemuck::try_from_bytes(&data[..size])
23            .map_err(error_msg::<Self>(data_len))
24            .unwrap())
25    }
26}
27
28impl<const MAX_DEPTH: usize, const MAX_BUFFER_SIZE: usize> ZeroCopy
29    for ConcurrentMerkleTree<MAX_DEPTH, MAX_BUFFER_SIZE>
30{
31}