use super::{BonkParams, RaydiumAmmV4Params, RaydiumCpmmParams};
pub type StonkFunViaQuoteParams = StonkFunViaSolParams;
#[derive(Clone)]
pub enum StonkFunMemeLeg {
Curve(BonkParams),
Graduated(RaydiumCpmmParams),
}
#[derive(Clone)]
pub enum StonkFunSolHop {
RaydiumCpmm(RaydiumCpmmParams),
RaydiumAmmV4(RaydiumAmmV4Params),
Route(super::StonkFunQuoteRoute),
}
impl From<super::StonkFunQuoteRoute> for StonkFunSolHop {
fn from(route: super::StonkFunQuoteRoute) -> Self {
Self::Route(route)
}
}
impl From<RaydiumCpmmParams> for StonkFunSolHop {
fn from(params: RaydiumCpmmParams) -> Self {
Self::RaydiumCpmm(params)
}
}
impl From<RaydiumAmmV4Params> for StonkFunSolHop {
fn from(params: RaydiumAmmV4Params) -> Self {
Self::RaydiumAmmV4(params)
}
}
#[derive(Clone)]
pub struct StonkFunViaSolParams {
pub meme_leg: StonkFunMemeLeg,
pub sol_hop: StonkFunSolHop,
}
impl StonkFunViaSolParams {
pub fn curve_direct(meme_leg: BonkParams) -> Self {
Self::curve(meme_leg, super::StonkFunQuoteRoute::default())
}
pub fn graduated_direct(meme_leg: RaydiumCpmmParams) -> Self {
Self::graduated(meme_leg, super::StonkFunQuoteRoute::default())
}
pub fn curve(meme_leg: BonkParams, sol_hop: impl Into<StonkFunSolHop>) -> Self {
Self { meme_leg: StonkFunMemeLeg::Curve(meme_leg), sol_hop: sol_hop.into() }
}
pub fn graduated(meme_leg: RaydiumCpmmParams, sol_hop: impl Into<StonkFunSolHop>) -> Self {
Self { meme_leg: StonkFunMemeLeg::Graduated(meme_leg), sol_hop: sol_hop.into() }
}
pub fn curve_with_cpmm(meme_leg: BonkParams, sol_quote_pool: RaydiumCpmmParams) -> Self {
Self::curve(meme_leg, sol_quote_pool)
}
pub fn curve_with_amm_v4(meme_leg: BonkParams, sol_quote_pool: RaydiumAmmV4Params) -> Self {
Self::curve(meme_leg, sol_quote_pool)
}
pub fn graduated_with_cpmm(
meme_leg: RaydiumCpmmParams,
sol_quote_pool: RaydiumCpmmParams,
) -> Self {
Self::graduated(meme_leg, sol_quote_pool)
}
pub fn graduated_with_amm_v4(
meme_leg: RaydiumCpmmParams,
sol_quote_pool: RaydiumAmmV4Params,
) -> Self {
Self::graduated(meme_leg, sol_quote_pool)
}
#[inline]
pub fn into_extension(self) -> super::DexParamEnum {
super::DexParamEnum::StonkFunViaSol(self)
}
}
impl From<StonkFunViaSolParams> for super::DexParamEnum {
fn from(params: StonkFunViaSolParams) -> Self {
Self::StonkFunViaSol(params)
}
}