account.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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]
  28. pub struct DataI16 {
  29. pub data: i16, // 2
  30. }
  31. size!(DataI16, 2);
  32. #[account(zero_copy)]
  33. pub struct DataZeroCopy {
  34. pub data: u16, // 2
  35. pub _padding: u8, // 1
  36. pub bump: u8, // 1
  37. }
  38. size!(DataZeroCopy, 4);
  39. #[account]
  40. pub struct DataWithFilter {
  41. pub authority: Pubkey, // 32
  42. pub filterable: Pubkey, // 32
  43. }
  44. size!(DataWithFilter, 64);
  45. #[account]
  46. pub struct DataMultidimensionalArray {
  47. pub data: [[u8; 10]; 10], // 100
  48. }
  49. size!(DataMultidimensionalArray, 100);
  50. #[account]
  51. pub struct DataConstArraySize {
  52. pub data: [u8; MAX_SIZE], // 10
  53. }
  54. size!(DataConstArraySize, MAX_SIZE);
  55. #[account]
  56. pub struct DataConstCastArraySize {
  57. pub data_one: [u8; MAX_SIZE as usize],
  58. pub data_two: [u8; MAX_SIZE_U8 as usize],
  59. }
  60. #[account]
  61. pub struct DataMultidimensionalArrayConstSizes {
  62. pub data: [[u8; MAX_SIZE_U8 as usize]; MAX_SIZE],
  63. }