riptide_amm/math/
quote.rs1use super::error::{CoreError, INVALID_ORACLE_DATA};
2
3use super::oracle::OracleData;
4
5use borsh::BorshDeserialize;
6
7#[cfg(feature = "wasm")]
8use riptide_amm_macros_lib::wasm_expose;
9
10#[derive(Debug, Clone, Copy, Eq, PartialEq)]
11#[cfg_attr(feature = "wasm", wasm_expose)]
12pub enum QuoteType {
13 ExactIn,
14 ExactOut,
15}
16
17#[derive(Debug, Clone, Copy, Eq, PartialEq)]
18#[cfg_attr(feature = "wasm", wasm_expose)]
19pub struct Quote {
20 pub amount_in: u64,
21 pub amount_out: u64,
22 pub quote_type: QuoteType,
23}
24
25#[cfg_attr(feature = "wasm", wasm_expose)]
26pub fn quote_exact_in(
27 amount: u64,
28 amount_is_token_a: bool,
29 oracle_data: &[u8],
30 reserves_a: u64,
31 reserves_b: u64,
32) -> Result<Quote, CoreError> {
33 let mut oracle_data = oracle_data;
34 let oracle_data = OracleData::deserialize(&mut oracle_data).map_err(|_| INVALID_ORACLE_DATA)?;
35 oracle_data.swap(amount, amount_is_token_a, true, reserves_a, reserves_b)
36}
37
38#[cfg_attr(feature = "wasm", wasm_expose)]
39pub fn quote_exact_out(
40 amount: u64,
41 amount_is_token_a: bool,
42 oracle_data: &[u8],
43 reserves_a: u64,
44 reserves_b: u64,
45) -> Result<Quote, CoreError> {
46 let mut oracle_data = oracle_data;
47 let oracle_data = OracleData::deserialize(&mut oracle_data).map_err(|_| INVALID_ORACLE_DATA)?;
48 oracle_data.swap(amount, amount_is_token_a, false, reserves_a, reserves_b)
49}