shank-parse 0.1.1

A proc-macro crate that generates Rust client code from Shank/Anchor IDL JSON files for Solana programs.
Documentation
shank_parse::shank_parse!("../idl/close_account.json");

#[cfg(test)]
mod tests {
    use super::close_account::accounts::*;
    use super::close_account::instructions::*;
    use super::close_account::ID;
    use shank_parse::__private::Pubkey;

    // ── Program ID ────────────────────────────────────────────────────────────

    #[test]
    fn test_program_id() {
        assert_eq!(ID.to_string(), "2HXWQuEjgRDbNcMx3X32C1aw4fftVMHyUf9KXYyTiPiD");
    }

    // ── accounts ─────────────────────────────────────────────────────────────

    #[test]
    fn test_meme_from_account_data() {
        let address = [42u8; 32];
        let mut data = Vec::new();
        data.extend_from_slice(&address);
        data.push(254u8);

        let meme = Meme::from_account_data(&data).unwrap();
        assert_eq!(meme.address, address);
        assert_eq!(meme.bump, 254);
    }

    #[test]
    fn test_meme_from_account_data_insufficient() {
        let data = vec![0u8; 10];
        assert!(Meme::from_account_data(&data).is_err());
    }

    // ── instructions ─────────────────────────────────────────────────────────

    #[test]
    fn test_create_meme_instruction() {
        let program_id = Pubkey::new_from_array([1u8; 32]);
        let accounts = CreateMemeAccounts {
            payer: Pubkey::new_from_array([2u8; 32]),
            meme: Pubkey::new_from_array([3u8; 32]),
            system_program: Pubkey::new_from_array([4u8; 32]),
        };
        let ix = create_meme(&program_id, &accounts);

        assert_eq!(ix.program_id, program_id);
        assert_eq!(ix.accounts.len(), 3);
        assert_eq!(ix.data, vec![0u8]); // discriminant only
        assert!(ix.accounts[0].is_signer); // payer
        assert!(ix.accounts[1].is_writable); // meme
    }

    #[test]
    fn test_close_meme_instruction() {
        let program_id = Pubkey::new_from_array([1u8; 32]);
        let accounts = CloseMemeAccounts {
            payer: Pubkey::new_from_array([2u8; 32]),
            meme: Pubkey::new_from_array([3u8; 32]),
            system_program: Pubkey::new_from_array([4u8; 32]),
        };
        let ix = close_meme(&program_id, &accounts);

        assert_eq!(ix.data, vec![1u8]); // discriminant only
        assert_eq!(ix.accounts.len(), 3);
    }
}