Skip to main content

gmsol_sdk/js/simulation/
deposit.rs

1//! Deposit simulation.
2
3use serde::{Deserialize, Serialize};
4use tsify_next::Tsify;
5use wasm_bindgen::prelude::*;
6
7use crate::{
8    js::{instructions::create_deposit::CreateDepositParamsJs, simulation::encode_borsh_base64},
9    simulation::deposit::DepositSimulationOutput,
10};
11
12/// Arguments for deposit simulation.
13#[derive(Debug, Serialize, Deserialize, Tsify)]
14#[tsify(into_wasm_abi, from_wasm_abi)]
15pub struct SimulateDepositArgs {
16    pub(crate) params: CreateDepositParamsJs,
17}
18
19/// Simulation output for deposit.
20#[wasm_bindgen(js_name = DepositSimulationOutput)]
21pub struct JsDepositSimulationOutput {
22    pub(crate) output: DepositSimulationOutput,
23}
24
25#[wasm_bindgen(js_class = DepositSimulationOutput)]
26impl JsDepositSimulationOutput {
27    /// Returns the deposit report.
28    pub fn report(&self) -> crate::Result<String> {
29        encode_borsh_base64(self.output.report())
30    }
31
32    /// Returns swap reports for the long token path.
33    pub fn long_swaps(&self) -> crate::Result<Vec<String>> {
34        self.output
35            .long_swaps()
36            .iter()
37            .map(encode_borsh_base64)
38            .collect()
39    }
40
41    /// Returns swap reports for the short token path.
42    pub fn short_swaps(&self) -> crate::Result<Vec<String>> {
43        self.output
44            .short_swaps()
45            .iter()
46            .map(encode_borsh_base64)
47            .collect()
48    }
49}