use borsh::BorshSerialize;
use solana_program::instruction::AccountMeta;
use crate::{solana_program, Pubkey};
pub trait Discriminator {
const DISCRIMINATOR: &'static [u8];
fn discriminator() -> &'static [u8] {
Self::DISCRIMINATOR
}
}
pub trait Owner {
fn owner() -> Pubkey;
}
pub trait ZeroCopy {}
pub trait ToAccountMetas {
fn to_account_metas(&self, is_signer: Option<bool>) -> Vec<AccountMeta>;
}
pub trait InstructionData: Discriminator + BorshSerialize {
fn data(&self) -> Vec<u8> {
let mut d = Self::DISCRIMINATOR.to_vec();
d.append(&mut borsh::to_vec(self).expect("Should always serialize"));
d
}
}