use serde::{Deserialize, Serialize};
use crate::primitives::{Address, Amount};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum Venue {
Raydium,
Orca,
Meteora,
Jupiter,
Custom,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RouteLeg {
pub venue: Venue,
pub input_mint: Address,
pub output_mint: Address,
pub split_bps: u32,
pub expected_out: Amount,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Route {
pub legs: Vec<RouteLeg>,
pub expected_out: Amount,
}
impl Route {
pub fn splits_valid(&self) -> bool {
!self.legs.is_empty()
&& self.legs.iter().map(|l| l.split_bps).sum::<u32>() == 10_000
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Fill {
pub amount_out: Amount,
pub executed_unix: u64,
}