use super::tree_info::PackedStateTreeInfo;
use crate::{AnchorDeserialize, AnchorSerialize};
pub trait CompressedAccountMetaTrait {
fn get_tree_info(&self) -> &PackedStateTreeInfo;
fn get_lamports(&self) -> Option<u64>;
fn get_root_index(&self) -> Option<u16>;
fn get_address(&self) -> Option<[u8; 32]>;
fn get_output_state_tree_index(&self) -> Option<u8>;
}
#[derive(Default, Debug, Clone, Copy, PartialEq, AnchorSerialize, AnchorDeserialize)]
pub struct CompressedAccountMetaNoLamportsNoAddress {
pub tree_info: PackedStateTreeInfo,
pub output_state_tree_index: u8,
}
impl CompressedAccountMetaTrait for CompressedAccountMetaNoLamportsNoAddress {
fn get_tree_info(&self) -> &PackedStateTreeInfo {
&self.tree_info
}
fn get_lamports(&self) -> Option<u64> {
None
}
fn get_root_index(&self) -> Option<u16> {
if self.tree_info.prove_by_index {
None
} else {
Some(self.tree_info.root_index)
}
}
fn get_address(&self) -> Option<[u8; 32]> {
None
}
fn get_output_state_tree_index(&self) -> Option<u8> {
Some(self.output_state_tree_index)
}
}
#[derive(Default, Debug, Clone, Copy, PartialEq, AnchorSerialize, AnchorDeserialize)]
pub struct CompressedAccountMetaNoAddress {
pub tree_info: PackedStateTreeInfo,
pub output_state_tree_index: u8,
pub lamports: u64,
}
impl CompressedAccountMetaTrait for CompressedAccountMetaNoAddress {
fn get_tree_info(&self) -> &PackedStateTreeInfo {
&self.tree_info
}
fn get_lamports(&self) -> Option<u64> {
Some(self.lamports)
}
fn get_root_index(&self) -> Option<u16> {
if self.tree_info.prove_by_index {
None
} else {
Some(self.tree_info.root_index)
}
}
fn get_address(&self) -> Option<[u8; 32]> {
None
}
fn get_output_state_tree_index(&self) -> Option<u8> {
Some(self.output_state_tree_index)
}
}
#[derive(Default, Debug, Clone, Copy, PartialEq, AnchorSerialize, AnchorDeserialize)]
pub struct CompressedAccountMeta {
pub tree_info: PackedStateTreeInfo,
pub address: [u8; 32],
pub output_state_tree_index: u8,
}
impl CompressedAccountMetaTrait for CompressedAccountMeta {
fn get_tree_info(&self) -> &PackedStateTreeInfo {
&self.tree_info
}
fn get_lamports(&self) -> Option<u64> {
None
}
fn get_root_index(&self) -> Option<u16> {
if self.tree_info.prove_by_index {
None
} else {
Some(self.tree_info.root_index)
}
}
fn get_address(&self) -> Option<[u8; 32]> {
Some(self.address)
}
fn get_output_state_tree_index(&self) -> Option<u8> {
Some(self.output_state_tree_index)
}
}
#[derive(Default, Debug, Clone, Copy, PartialEq, AnchorSerialize, AnchorDeserialize)]
pub struct CompressedAccountMetaInitIfNeeded {
pub init: bool,
pub with_new_adress: bool,
pub output_state_tree_index: u8,
pub address: [u8; 32],
pub tree_info: Option<PackedStateTreeInfo>,
}
#[derive(Default, Debug, Clone, Copy, PartialEq, AnchorSerialize, AnchorDeserialize)]
pub struct CompressedAccountMetaWithLamports {
pub tree_info: PackedStateTreeInfo,
pub lamports: u64,
pub address: [u8; 32],
pub output_state_tree_index: u8,
}
impl CompressedAccountMetaTrait for CompressedAccountMetaWithLamports {
fn get_tree_info(&self) -> &PackedStateTreeInfo {
&self.tree_info
}
fn get_lamports(&self) -> Option<u64> {
Some(self.lamports)
}
fn get_root_index(&self) -> Option<u16> {
if self.tree_info.prove_by_index {
None
} else {
Some(self.tree_info.root_index)
}
}
fn get_address(&self) -> Option<[u8; 32]> {
Some(self.address)
}
fn get_output_state_tree_index(&self) -> Option<u8> {
Some(self.output_state_tree_index)
}
}
pub type CompressedAccountMetaBurn = CompressedAccountMetaReadOnly;
#[derive(Default, Debug, Clone, Copy, PartialEq, AnchorSerialize, AnchorDeserialize)]
pub struct CompressedAccountMetaReadOnly {
pub tree_info: PackedStateTreeInfo,
pub address: [u8; 32],
}
impl CompressedAccountMetaTrait for CompressedAccountMetaReadOnly {
fn get_tree_info(&self) -> &PackedStateTreeInfo {
&self.tree_info
}
fn get_lamports(&self) -> Option<u64> {
None
}
fn get_root_index(&self) -> Option<u16> {
if self.tree_info.prove_by_index {
None
} else {
Some(self.tree_info.root_index)
}
}
fn get_address(&self) -> Option<[u8; 32]> {
Some(self.address)
}
fn get_output_state_tree_index(&self) -> Option<u8> {
None
}
}