Skip to main content

spl_token_2022_interface/extension/pausable/
mod.rs

1use {
2    crate::extension::{Extension, ExtensionType},
3    bytemuck::{Pod, Zeroable},
4    solana_address::Address,
5    solana_nullable::MaybeNull,
6    solana_zero_copy::unaligned::Bool,
7};
8#[cfg(feature = "serde")]
9use {
10    serde::{Deserialize, Serialize},
11    serde_with::{As, DisplayFromStr},
12};
13
14/// Instruction types for the pausable extension
15pub mod instruction;
16
17/// Indicates that the tokens from this mint can be paused
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
20#[derive(Clone, Copy, Debug, Default, PartialEq, Pod, Zeroable)]
21#[repr(C)]
22pub struct PausableConfig {
23    /// Authority that can pause or resume activity on the mint
24    #[cfg_attr(feature = "serde", serde(with = "As::<Option<DisplayFromStr>>"))]
25    pub authority: MaybeNull<Address>,
26    /// Whether minting / transferring / burning tokens is paused
27    pub paused: Bool,
28}
29
30/// Indicates that the tokens from this account belong to a pausable mint
31#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
32#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
33#[derive(Clone, Copy, Debug, Default, PartialEq, Pod, Zeroable)]
34#[repr(transparent)]
35pub struct PausableAccount;
36
37impl Extension for PausableConfig {
38    const TYPE: ExtensionType = ExtensionType::Pausable;
39}
40
41impl Extension for PausableAccount {
42    const TYPE: ExtensionType = ExtensionType::PausableAccount;
43}