account.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. use anchor_lang::prelude::*;
  2. macro_rules! size {
  3. ($name: ident, $size:expr) => {
  4. impl $name {
  5. pub const LEN: usize = $size;
  6. }
  7. };
  8. }
  9. pub const MAX_SIZE: usize = 10;
  10. pub const MAX_SIZE_U8: u8 = 11;
  11. #[account]
  12. pub struct Data {
  13. pub udata: u128, // 16
  14. pub idata: i128, // 16
  15. }
  16. size!(Data, 32);
  17. #[account]
  18. pub struct DataU16 {
  19. pub data: u16, // 2
  20. }
  21. size!(DataU16, 32);
  22. #[account]
  23. pub struct DataI8 {
  24. pub data: i8, // 1
  25. }
  26. size!(DataI8, 1);
  27. #[account(zero_copy)]
  28. pub struct DataZeroCopy {
  29. pub data: u16, // 2
  30. pub _padding: u8, // 1
  31. pub bump: u8, // 1
  32. }
  33. size!(DataZeroCopy, 4);
  34. #[account]
  35. pub struct DataWithFilter {
  36. pub authority: Pubkey, // 32
  37. pub filterable: Pubkey, // 32
  38. }
  39. size!(DataWithFilter, 64);
  40. #[account]
  41. pub struct DataMultidimensionalArray {
  42. pub data: [[u8; 10]; 10], // 100
  43. }
  44. size!(DataMultidimensionalArray, 100);
  45. #[account]
  46. pub struct DataConstArraySize {
  47. pub data: [u8; MAX_SIZE], // 10
  48. }
  49. size!(DataConstArraySize, MAX_SIZE);
  50. #[account]
  51. pub struct DataConstCastArraySize {
  52. pub data_one: [u8; MAX_SIZE as usize],
  53. pub data_two: [u8; MAX_SIZE_U8 as usize],
  54. }
  55. #[account]
  56. pub struct DataMultidimensionalArrayConstSizes {
  57. pub data: [[u8; MAX_SIZE_U8 as usize]; MAX_SIZE],
  58. }