pub use solana_pubkey::Pubkey;
use bytemuck::{Pod, Zeroable};
use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout, Unaligned};
#[repr(C)]
#[cfg_attr(
all(feature = "std", feature = "anchor"),
derive(anchor_lang::AnchorDeserialize, anchor_lang::AnchorSerialize)
)]
#[cfg_attr(
not(feature = "anchor"),
derive(borsh::BorshDeserialize, borsh::BorshSerialize)
)]
#[derive(
Pod,
Zeroable,
FromBytes,
IntoBytes,
KnownLayout,
Immutable,
Unaligned,
Debug,
Default,
Copy,
Clone,
PartialEq,
Eq,
Hash,
)]
pub struct ZeroCopyPubkey(pub [u8; 32]);
impl ZeroCopyPubkey {
pub fn to_bytes(&self) -> [u8; 32] {
self.0
}
}
impl From<[u8; 32]> for ZeroCopyPubkey {
fn from(bytes: [u8; 32]) -> Self {
Self(bytes)
}
}
impl From<ZeroCopyPubkey> for [u8; 32] {
fn from(value: ZeroCopyPubkey) -> Self {
value.0
}
}
impl From<Pubkey> for ZeroCopyPubkey {
fn from(value: Pubkey) -> Self {
Self(value.to_bytes())
}
}
impl From<ZeroCopyPubkey> for Pubkey {
fn from(value: ZeroCopyPubkey) -> Self {
Pubkey::from(value.0)
}
}