light_token_interface/instructions/extensions/
mod.rs

1pub mod compressed_only;
2pub mod compressible;
3pub mod token_metadata;
4pub use compressed_only::{
5    CompressedOnlyExtensionInstructionData, ZCompressedOnlyExtensionInstructionData,
6};
7pub use compressible::{CompressToPubkey, CompressibleExtensionInstructionData};
8use light_compressible::compression_info::CompressionInfo;
9use light_zero_copy::ZeroCopy;
10pub use token_metadata::{TokenMetadataInstructionData, ZTokenMetadataInstructionData};
11
12use crate::{AnchorDeserialize, AnchorSerialize};
13
14#[derive(Debug, Clone, PartialEq, Eq, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
15#[repr(C)]
16pub enum ExtensionInstructionData {
17    Placeholder0,
18    Placeholder1,
19    Placeholder2,
20    Placeholder3,
21    Placeholder4,
22    Placeholder5,
23    Placeholder6,
24    Placeholder7,
25    Placeholder8,
26    Placeholder9,
27    Placeholder10,
28    Placeholder11,
29    Placeholder12,
30    Placeholder13,
31    Placeholder14,
32    Placeholder15,
33    Placeholder16,
34    Placeholder17,
35    Placeholder18,
36    TokenMetadata(TokenMetadataInstructionData),
37    Placeholder20,
38    Placeholder21,
39    Placeholder22,
40    Placeholder23,
41    Placeholder24,
42    Placeholder25,
43    Placeholder26,
44    /// Reserved for PausableAccount extension
45    Placeholder27,
46    /// Reserved for PermanentDelegateAccount extension
47    Placeholder28,
48    Placeholder29,
49    Placeholder30,
50    /// CompressedOnly extension for compressed token accounts
51    CompressedOnly(CompressedOnlyExtensionInstructionData),
52    /// Compressible extension - reuses CompressionInfo from light_compressible
53    /// Position 32 matches ExtensionStruct::Compressible
54    Compressible(CompressionInfo),
55}
56
57/// Find the CompressedOnly extension from a TLV slice.
58#[inline(always)]
59pub fn find_compressed_only<'a>(
60    tlv: &'a [ZExtensionInstructionData<'a>],
61) -> Option<&'a ZCompressedOnlyExtensionInstructionData<'a>> {
62    tlv.iter().find_map(|ext| match ext {
63        ZExtensionInstructionData::CompressedOnly(data) => Some(data),
64        _ => None,
65    })
66}