pub unsafe trait Pod: Zeroable + Copy + 'static { }
Expand description

Marker trait for “plain old data”.

The point of this trait is that once something is marked “plain old data” you can really go to town with the bit fiddling and bit casting. Therefore, it’s a relatively strong claim to make about a type. Do not add this to your type casually.

Reminder: The results of casting around bytes between data types are endian dependant. Little-endian machines are the most common, but big-endian machines do exist (and big-endian is also used for “network order” bytes).

Safety

  • The type must be inhabited (eg: no Infallible).
  • The type must allow any bit pattern (eg: no bool or char, which have illegal bit patterns).
  • The type must not contain any uninit (or padding) bytes, either in the middle or on the end (eg: no #[repr(C)] struct Foo(u8, u16), which has padding in the middle, and also no #[repr(C)] struct Foo(u16, u8), which has padding on the end).
  • The type needs to have all fields also be Pod.
  • The type needs to be repr(C) or repr(transparent). In the case of repr(C), the packed and align repr modifiers can be used as long as all other rules end up being followed.
  • It is disallowed for types to contain pointer types, Cell, UnsafeCell, atomics, and any other forms of interior mutability.
  • More precisely: A shared reference to the type must allow reads, and only reads. RustBelt’s separation logic is based on the notion that a type is allowed to define a sharing predicate, its own invariant that must hold for shared references, and this predicate is the reasoning that allow it to deal with atomic and cells etc. We require the sharing predicate to be trivial and permit only read-only access.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl Pod for f32

source§

impl Pod for f64

source§

impl Pod for i8

source§

impl Pod for i16

source§

impl Pod for i32

source§

impl Pod for i64

source§

impl Pod for i128

source§

impl Pod for isize

source§

impl Pod for u8

source§

impl Pod for u16

source§

impl Pod for u32

source§

impl Pod for u64

source§

impl Pod for u128

source§

impl Pod for ()

source§

impl Pod for usize

source§

impl Pod for __m128

source§

impl Pod for __m128d

source§

impl Pod for __m128i

source§

impl Pod for __m256

source§

impl Pod for __m256d

source§

impl Pod for __m256i

source§

impl Pod for PhantomPinned

source§

impl Pod for PodG1

source§

impl Pod for PodG2

source§

impl Pod for Hash

source§

impl Pod for Pubkey

source§

impl Pod for PodEdwardsPoint

source§

impl Pod for PodRistrettoPoint

source§

impl Pod for PodScalar

source§

impl Pod for AeCiphertext

source§

impl Pod for DecryptHandle

source§

impl Pod for ElGamalCiphertext

source§

impl Pod for ElGamalPubkey

source§

impl Pod for GroupedElGamalCiphertext2Handles

source§

impl Pod for GroupedElGamalCiphertext3Handles

source§

impl Pod for FeeEncryption

source§

impl Pod for FeeParameters

source§

impl Pod for TransferAmountCiphertext

source§

impl Pod for PedersenCommitment

source§

impl Pod for RangeProofU64

source§

impl Pod for RangeProofU128

source§

impl Pod for RangeProofU256

source§

impl Pod for BatchedGroupedCiphertext2HandlesValidityProof

source§

impl Pod for CiphertextCiphertextEqualityProof

source§

impl Pod for CiphertextCommitmentEqualityProof

source§

impl Pod for FeeSigmaProof

source§

impl Pod for GroupedCiphertext2HandlesValidityProof

source§

impl Pod for PubkeyValidityProof

source§

impl Pod for ZeroBalanceProof

source§

impl Pod for CompressedRistretto

source§

impl Pod for PodProofType

source§

impl Pod for PodU16

source§

impl Pod for PodU64

source§

impl Pod for ProofContextStateMeta

source§

impl Pod for OptionalNonZeroElGamalPubkey

source§

impl Pod for OptionalNonZeroPubkey

source§

impl Pod for PodBool

source§

impl Pod for PodI16

source§

impl Pod for PodI64

source§

impl Pod for PodU16

source§

impl Pod for PodU32

source§

impl Pod for PodU64

source§

impl Pod for InitializeGroup

source§

impl Pod for InitializeMember

source§

impl Pod for UpdateGroupAuthority

source§

impl Pod for UpdateGroupMaxSize

source§

impl Pod for TokenGroup

source§

impl Pod for TokenGroupMember

source§

impl Pod for Length

§

impl Pod for ArrayDiscriminator

§

impl Pod for Ed25519SignatureOffsets

§

impl Pod for ExtraAccountMeta

source§

impl<T> Pod for Option<T>
where T: PodInOption,

source§

impl<T> Pod for [T; 0]
where T: Pod,

source§

impl<T> Pod for [T; 1]
where T: Pod,

source§

impl<T> Pod for [T; 2]
where T: Pod,

source§

impl<T> Pod for [T; 3]
where T: Pod,

source§

impl<T> Pod for [T; 4]
where T: Pod,

source§

impl<T> Pod for [T; 5]
where T: Pod,

source§

impl<T> Pod for [T; 6]
where T: Pod,

source§

impl<T> Pod for [T; 7]
where T: Pod,

source§

impl<T> Pod for [T; 8]
where T: Pod,

source§

impl<T> Pod for [T; 9]
where T: Pod,

source§

impl<T> Pod for [T; 10]
where T: Pod,

source§

impl<T> Pod for [T; 11]
where T: Pod,

source§

impl<T> Pod for [T; 12]
where T: Pod,

source§

impl<T> Pod for [T; 13]
where T: Pod,

source§

impl<T> Pod for [T; 14]
where T: Pod,

source§

impl<T> Pod for [T; 15]
where T: Pod,

source§

impl<T> Pod for [T; 16]
where T: Pod,

source§

impl<T> Pod for [T; 17]
where T: Pod,

source§

impl<T> Pod for [T; 18]
where T: Pod,

source§

impl<T> Pod for [T; 19]
where T: Pod,

source§

impl<T> Pod for [T; 20]
where T: Pod,

source§

impl<T> Pod for [T; 21]
where T: Pod,

source§

impl<T> Pod for [T; 22]
where T: Pod,

source§

impl<T> Pod for [T; 23]
where T: Pod,

source§

impl<T> Pod for [T; 24]
where T: Pod,

source§

impl<T> Pod for [T; 25]
where T: Pod,

source§

impl<T> Pod for [T; 26]
where T: Pod,

source§

impl<T> Pod for [T; 27]
where T: Pod,

source§

impl<T> Pod for [T; 28]
where T: Pod,

source§

impl<T> Pod for [T; 29]
where T: Pod,

source§

impl<T> Pod for [T; 30]
where T: Pod,

source§

impl<T> Pod for [T; 31]
where T: Pod,

source§

impl<T> Pod for [T; 32]
where T: Pod,

source§

impl<T> Pod for [T; 48]
where T: Pod,

source§

impl<T> Pod for [T; 64]
where T: Pod,

source§

impl<T> Pod for [T; 96]
where T: Pod,

source§

impl<T> Pod for [T; 128]
where T: Pod,

source§

impl<T> Pod for [T; 256]
where T: Pod,

source§

impl<T> Pod for [T; 512]
where T: Pod,

source§

impl<T> Pod for [T; 1024]
where T: Pod,

source§

impl<T> Pod for [T; 2048]
where T: Pod,

source§

impl<T> Pod for [T; 4096]
where T: Pod,

source§

impl<T> Pod for PhantomData<T>
where T: 'static + ?Sized,

source§

impl<T> Pod for ManuallyDrop<T>
where T: Pod,

source§

impl<T> Pod for Wrapping<T>
where T: Pod,

Implementors§

source§

impl Pod for WithheldTokensInfo

source§

impl Pod for InitializeConfidentialTransferFeeConfigData

source§

impl Pod for WithdrawWithheldTokensFromAccountsData

source§

impl Pod for WithdrawWithheldTokensFromMintData

source§

impl Pod for ConfidentialTransferFeeAmount

source§

impl Pod for ConfidentialTransferFeeConfig

source§

impl Pod for CpiGuard

source§

impl Pod for DefaultAccountState

source§

impl Pod for spl_token_2022::extension::group_member_pointer::instruction::InitializeInstructionData

source§

impl Pod for spl_token_2022::extension::group_member_pointer::instruction::UpdateInstructionData

source§

impl Pod for GroupMemberPointer

source§

impl Pod for spl_token_2022::extension::group_pointer::instruction::InitializeInstructionData

source§

impl Pod for spl_token_2022::extension::group_pointer::instruction::UpdateInstructionData

source§

impl Pod for GroupPointer

source§

impl Pod for ImmutableOwner

source§

impl Pod for spl_token_2022::extension::interest_bearing_mint::instruction::InitializeInstructionData

source§

impl Pod for InterestBearingConfig

source§

impl Pod for MemoTransfer

source§

impl Pod for spl_token_2022::extension::metadata_pointer::instruction::InitializeInstructionData

source§

impl Pod for spl_token_2022::extension::metadata_pointer::instruction::UpdateInstructionData

source§

impl Pod for MetadataPointer

source§

impl Pod for MintCloseAuthority

source§

impl Pod for NonTransferable

source§

impl Pod for NonTransferableAccount

source§

impl Pod for PermanentDelegate

source§

impl Pod for spl_token_2022::extension::Length

source§

impl Pod for TransferFee

source§

impl Pod for TransferFeeAmount

source§

impl Pod for TransferFeeConfig

source§

impl Pod for spl_token_2022::extension::transfer_hook::instruction::InitializeInstructionData

source§

impl Pod for spl_token_2022::extension::transfer_hook::instruction::UpdateInstructionData

source§

impl Pod for TransferHook

source§

impl Pod for TransferHookAccount

source§

impl Pod for ApplyPendingBalanceAccountInfo

source§

impl Pod for EmptyAccountAccountInfo

source§

impl Pod for TransferAccountInfo

source§

impl Pod for WithdrawAccountInfo

source§

impl Pod for SourceDecryptHandles

source§

impl Pod for ConfidentialTransferAccount

source§

impl Pod for ConfidentialTransferMint

source§

impl Pod for ApplyPendingBalanceData

source§

impl Pod for BatchedGroupedCiphertext2HandlesValidityProofContext

source§

impl Pod for BatchedGroupedCiphertext2HandlesValidityProofData

source§

impl Pod for BatchedRangeProofContext

source§

impl Pod for BatchedRangeProofU64Data

source§

impl Pod for BatchedRangeProofU128Data

source§

impl Pod for BatchedRangeProofU256Data

source§

impl Pod for CiphertextCiphertextEqualityProofContext

source§

impl Pod for CiphertextCiphertextEqualityProofData

source§

impl Pod for CiphertextCommitmentEqualityProofContext

source§

impl Pod for CiphertextCommitmentEqualityProofData

source§

impl Pod for ConfigureAccountInstructionData

source§

impl Pod for DepositInstructionData

source§

impl Pod for EmptyAccountInstructionData

source§

impl Pod for FeeSigmaProofContext

source§

impl Pod for FeeSigmaProofData

source§

impl Pod for GroupedCiphertext2HandlesValidityProofContext

source§

impl Pod for GroupedCiphertext2HandlesValidityProofData

source§

impl Pod for InitializeMintData

source§

impl Pod for PubkeyValidityData

source§

impl Pod for PubkeyValidityProofContext

source§

impl Pod for RangeProofContext

source§

impl Pod for RangeProofU64Data

source§

impl Pod for TransferData

source§

impl Pod for TransferInstructionData

source§

impl Pod for TransferProofContext

source§

impl Pod for TransferWithFeeData

source§

impl Pod for TransferWithFeeProofContext

source§

impl Pod for TransferWithSplitProofsInstructionData

source§

impl Pod for UpdateMintData

source§

impl Pod for WithdrawData

source§

impl Pod for WithdrawInstructionData

source§

impl Pod for WithdrawProofContext

source§

impl Pod for ZeroBalanceProofContext

source§

impl Pod for ZeroBalanceProofData

source§

impl Pod for TransferPubkeys

source§

impl Pod for TransferWithFeePubkeys

source§

impl Pod for WithdrawProof

source§

impl<T> Pod for ProofContextState<T>
where T: Pod,