generics_test.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #![allow(dead_code)]
  2. use anchor_lang::prelude::borsh::maybestd::io::Write;
  3. use anchor_lang::prelude::*;
  4. use borsh::{BorshDeserialize, BorshSerialize};
  5. #[derive(Accounts)]
  6. pub struct GenericsTest<'info, T, U, const N: usize>
  7. where
  8. T: AccountSerialize + AccountDeserialize + Clone,
  9. U: BorshSerialize + BorshDeserialize + Default + Clone,
  10. {
  11. pub non_generic: AccountInfo<'info>,
  12. pub generic: ProgramAccount<'info, T>,
  13. pub const_generic: Loader<'info, Account<N>>,
  14. pub associated: CpiAccount<'info, Associated<U>>,
  15. }
  16. #[account(zero_copy)]
  17. pub struct Account<const N: usize> {
  18. pub data: WrappedU8Array<N>,
  19. }
  20. #[account]
  21. #[derive(Default)]
  22. pub struct Associated<T>
  23. where
  24. T: BorshDeserialize + BorshSerialize + Default,
  25. {
  26. pub data: T,
  27. }
  28. #[derive(Copy, Clone)]
  29. pub struct WrappedU8Array<const N: usize>(u8);
  30. impl<const N: usize> BorshSerialize for WrappedU8Array<N> {
  31. fn serialize<W: Write>(&self, _writer: &mut W) -> borsh::maybestd::io::Result<()> {
  32. todo!()
  33. }
  34. }
  35. impl<const N: usize> BorshDeserialize for WrappedU8Array<N> {
  36. fn deserialize(_buf: &mut &[u8]) -> borsh::maybestd::io::Result<Self> {
  37. todo!()
  38. }
  39. }