use aligned_sized::aligned_sized;
use light_compressible::compression_info::CompressionInfo;
use light_zero_copy::{ZeroCopy, ZeroCopyMut};
use crate::{AnchorDeserialize, AnchorSerialize};
#[derive(
Debug,
Clone,
Hash,
Copy,
PartialEq,
Eq,
AnchorSerialize,
AnchorDeserialize,
ZeroCopy,
ZeroCopyMut,
)]
#[repr(C)]
#[aligned_sized]
pub struct CompressibleExtension {
pub decimals_option: u8,
pub decimals: u8,
pub compression_only: bool,
pub is_ata: u8,
pub info: CompressionInfo,
}
impl CompressibleExtension {
pub fn decimals(&self) -> Option<u8> {
if self.decimals_option == 1 {
Some(self.decimals)
} else {
None
}
}
pub fn set_decimals(&mut self, decimals: Option<u8>) {
match decimals {
Some(d) => {
self.decimals_option = 1;
self.decimals = d;
}
None => {
self.decimals_option = 0;
self.decimals = 0;
}
}
}
}
impl ZCompressibleExtension<'_> {
#[inline(always)]
pub fn decimals(&self) -> Option<u8> {
if self.decimals_option == 1 {
Some(self.decimals)
} else {
None
}
}
}
impl ZCompressibleExtensionMut<'_> {
#[inline(always)]
pub fn decimals(&self) -> Option<u8> {
if self.decimals_option == 1 {
Some(self.decimals)
} else {
None
}
}
#[inline(always)]
pub fn set_decimals(&mut self, decimals: Option<u8>) {
match decimals {
Some(d) => {
self.decimals_option = 1;
self.decimals = d;
}
None => {
self.decimals_option = 0;
self.decimals = 0;
}
}
}
#[inline(always)]
pub fn is_ata(&self) -> bool {
self.is_ata != 0
}
}