use crate::trading::SwapParams;
use anyhow::Result;
use solana_sdk::{instruction::Instruction, signature::Signature};
#[async_trait::async_trait]
pub trait TradeExecutor: Send + Sync {
async fn swap(
&self,
params: SwapParams,
) -> Result<(bool, Vec<Signature>, Option<anyhow::Error>)>;
fn protocol_name(&self) -> &'static str;
}
#[async_trait::async_trait]
pub trait InstructionBuilder: Send + Sync {
async fn build_buy_instructions(&self, params: &SwapParams) -> Result<Vec<Instruction>>;
async fn build_sell_instructions(&self, params: &SwapParams) -> Result<Vec<Instruction>>;
}