use borsh::{BorshDeserialize, BorshSerialize};
use num_derive::FromPrimitive;
use solana_program::{
instruction::{AccountMeta, Instruction},
pubkey::Pubkey,
};
use bonfida_utils::{BorshSize, InstructionsAccount};
pub use crate::processor::{
cancel_order, close_market, consume_events, create_market, mass_cancel_orders, new_order,
};
#[derive(BorshDeserialize, BorshSerialize, FromPrimitive)]
pub enum AgnosticOrderbookInstruction {
CreateMarket,
NewOrder,
ConsumeEvents,
CancelOrder,
CloseMarket,
MassCancelOrders,
}
pub fn create_market(
accounts: create_market::Accounts<Pubkey>,
register_account: Pubkey,
params: create_market::Params,
) -> Instruction {
let mut i = accounts.get_instruction(
crate::id(),
AgnosticOrderbookInstruction::CreateMarket as u8,
params,
);
i.accounts.push(AccountMeta {
pubkey: register_account,
is_signer: false,
is_writable: true,
});
i
}
pub fn new_order<C: BorshSerialize + BorshSize>(
accounts: new_order::Accounts<Pubkey>,
register_account: Pubkey,
params: new_order::Params<C>,
) -> Instruction {
let mut i = accounts.get_instruction(
crate::id(),
AgnosticOrderbookInstruction::NewOrder as u8,
params,
);
i.accounts.push(AccountMeta {
pubkey: register_account,
is_signer: false,
is_writable: true,
});
i
}
pub fn cancel_order(
accounts: cancel_order::Accounts<Pubkey>,
register_account: Pubkey,
params: cancel_order::Params,
) -> Instruction {
let mut i = accounts.get_instruction(
crate::id(),
AgnosticOrderbookInstruction::CancelOrder as u8,
params,
);
i.accounts.push(AccountMeta {
pubkey: register_account,
is_signer: false,
is_writable: true,
});
i
}
pub fn consume_events(
accounts: consume_events::Accounts<Pubkey>,
register_account: Pubkey,
params: consume_events::Params,
) -> Instruction {
let mut i = accounts.get_instruction(
crate::id(),
AgnosticOrderbookInstruction::ConsumeEvents as u8,
params,
);
i.accounts.push(AccountMeta {
pubkey: register_account,
is_signer: false,
is_writable: true,
});
i
}
pub fn close_market(
accounts: close_market::Accounts<Pubkey>,
register_account: Pubkey,
params: close_market::Params,
) -> Instruction {
let mut i = accounts.get_instruction(
crate::id(),
AgnosticOrderbookInstruction::CloseMarket as u8,
params,
);
i.accounts.push(AccountMeta {
pubkey: register_account,
is_signer: false,
is_writable: true,
});
i
}
pub fn mass_cancel_orders(
accounts: mass_cancel_orders::Accounts<Pubkey>,
register_account: Pubkey,
params: mass_cancel_orders::Params,
) -> Instruction {
let mut i = accounts.get_instruction(
crate::id(),
AgnosticOrderbookInstruction::CloseMarket as u8,
params,
);
i.accounts.push(AccountMeta {
pubkey: register_account,
is_signer: false,
is_writable: true,
});
i
}