jupiter_cpi/
lib.rs

1anchor_gen::generate_cpi_crate!("idl.json");
2
3anchor_lang::declare_id!("JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB");
4
5pub mod jupiter_override {
6    use super::Side;
7    use super::SplitLeg;
8    use anchor_lang::prelude::*;
9    use anchor_lang::Discriminator;
10    use anchor_lang::{AnchorSerialize, InstructionData};
11    use std::io::Write;
12
13    #[derive(AnchorSerialize)]
14    pub enum Swap {
15        Saber,
16        SaberAddDecimalsDeposit,
17        SaberAddDecimalsWithdraw,
18        TokenSwap,
19        Sencha,
20        Step,
21        Cropper,
22        Raydium,
23        Crema,
24        Lifinity,
25        Mercurial,
26        Cykura,
27        Serum {
28            side: Side,
29        },
30        MarinadeDeposit,
31        MarinadeUnstake,
32        Aldrin {
33            side: Side,
34        },
35        AldrinV2 {
36            side: Side,
37        },
38        Whirlpool {
39            a_to_b: bool,
40        },
41        Invariant {
42            x_to_y: bool,
43        },
44        Meteora,
45        GooseFX,
46        DeltaFi {
47            stable: bool,
48        },
49        Balansol,
50        MarcoPolo {
51            x_to_y: bool,
52        },
53        Dradex {
54            side: Side,
55        },
56        LifinityV2,
57        RaydiumClmm,
58        Openbook {
59            side: Side,
60        },
61        Phoenix {
62            side: Side,
63        },
64        Symmetry {
65            from_token_id: u64,
66            to_token_id: u64,
67        },
68    }
69
70    pub enum SwapLeg {
71        Chain { swap_legs: Vec<SwapLeg> },
72        Split { split_legs: Vec<SplitLeg> },
73        Swap { swap: Swap },
74    }
75
76    impl AnchorSerialize for SwapLeg {
77        #[inline]
78        fn serialize<W: Write>(&self, writer: &mut W) -> std::io::Result<()> {
79            match self {
80                SwapLeg::Chain { swap_legs } => {
81                    0u8.serialize(writer)?;
82                    swap_legs.serialize(writer)
83                }
84                SwapLeg::Split { split_legs } => {
85                    1u8.serialize(writer)?;
86                    split_legs.serialize(writer)
87                }
88                SwapLeg::Swap { swap } => {
89                    2u8.serialize(writer)?;
90                    swap.serialize(writer)
91                }
92            }
93        }
94    }
95
96    #[derive(AnchorSerialize)]
97    pub struct Route {
98        pub swap_leg: SwapLeg,
99        pub in_amount: u64,
100        pub quoted_out_amount: u64,
101        pub slippage_bps: u16,
102        pub platform_fee_bps: u8,
103    }
104
105    impl Discriminator for Route {
106        const DISCRIMINATOR: [u8; 8] = [229, 23, 203, 151, 122, 227, 173, 42];
107    }
108
109    impl InstructionData for Route {}
110}