gmsol_utils/
pubkey.rs

1use anchor_lang::solana_program::pubkey::Pubkey;
2
3/// Convert to bytes with only the reference of a [`Pubkey`].
4pub fn to_bytes(pubkey: &Pubkey) -> [u8; 32] {
5    pubkey.to_bytes()
6}
7
8/// The "default" pubkey.
9pub const DEFAULT_PUBKEY: Pubkey = Pubkey::new_from_array([0; 32]);
10
11/// Parse optional address where the default pubkey is treated as `None`.
12pub fn optional_address(pubkey: &Pubkey) -> Option<&Pubkey> {
13    if *pubkey == DEFAULT_PUBKEY {
14        None
15    } else {
16        Some(pubkey)
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23
24    #[test]
25    fn test_optional_address() {
26        assert_eq!(Pubkey::default(), DEFAULT_PUBKEY);
27        assert_eq!(optional_address(&DEFAULT_PUBKEY), None);
28        assert_eq!(optional_address(&Pubkey::default()), None);
29        let address = Pubkey::new_unique();
30        assert_eq!(optional_address(&address), Some(&address));
31    }
32}