#![allow(dead_code)] use anchor_lang::prelude::borsh::maybestd::io::Write; use anchor_lang::prelude::*; use borsh::{BorshDeserialize, BorshSerialize}; #[derive(Accounts)] pub struct GenericsTest<'info, T, U, const N: usize> where T: AccountSerialize + AccountDeserialize + Clone, U: BorshSerialize + BorshDeserialize + Default + Clone, { pub non_generic: AccountInfo<'info>, pub generic: ProgramAccount<'info, T>, pub const_generic: Loader<'info, Account>, pub associated: CpiAccount<'info, Associated>, } #[account(zero_copy)] pub struct Account { pub data: WrappedU8Array, } #[account] #[derive(Default)] pub struct Associated where T: BorshDeserialize + BorshSerialize + Default, { pub data: T, } #[derive(Copy, Clone)] pub struct WrappedU8Array(u8); impl BorshSerialize for WrappedU8Array { fn serialize(&self, _writer: &mut W) -> borsh::maybestd::io::Result<()> { todo!() } } impl BorshDeserialize for WrappedU8Array { fn deserialize(_buf: &mut &[u8]) -> borsh::maybestd::io::Result { todo!() } }