diff --git a/mm2src/mm2_main/src/lp_wallet.rs b/mm2src/mm2_main/src/lp_wallet.rs index 19ac357cab..1cb9c14db1 100644 --- a/mm2src/mm2_main/src/lp_wallet.rs +++ b/mm2src/mm2_main/src/lp_wallet.rs @@ -5,6 +5,7 @@ use http::StatusCode; use mm2_core::mm_ctx::MmArc; use mm2_err_handle::prelude::*; use serde::de::DeserializeOwned; +use serde::Serialize; use serde_json::{self as json}; cfg_wasm32! { @@ -499,3 +500,87 @@ pub async fn get_mnemonic_rpc(ctx: MmArc, req: GetMnemonicRequest) -> MmResult StatusCode { + match self { + GetWalletError::WalletNameNotInitialized => StatusCode::BAD_REQUEST, + GetWalletError::Internal(_) => StatusCode::INTERNAL_SERVER_ERROR, + } + } +} + +/// `GetWalletRequest` is a struct representing the parameters for the `get_wallet` RPC method. +/// +/// Currently, it does not contain any fields but serves as a placeholder for future extensibility. +/// It ensures compatibility with future versions that might introduce new fields. +#[derive(Debug, Deserialize, Default)] +#[serde(default)] +pub struct GetWalletRequest { + // Currently empty, but may hold future parameters. +} + +/// `GetWalletResponse` is a struct representing the response from the `get_wallet` RPC method. +/// +/// It currently includes the name of the active wallet. This struct is designed to be extendable in the future +/// to include more wallet properties such as balance, state, or configurations. +#[derive(Debug, Serialize)] +pub struct GetWalletResponse { + /// The name of the currently active wallet. + pub wallet_name: String, +} + +/// Retrieves the active wallet name from the context. +/// +/// # Parameters +/// +/// - `ctx`: The context. +/// - `req`: The request structure (optional). +/// +/// # Returns +/// +/// A `Result` type containing: +/// +/// * `Ok(GetWalletResponse)` - The wallet name. +/// * `MmError` - Error indicating the wallet name is not initialized. +/// +/// # Examples +/// +/// ```rust +/// let ctx = MmArc::new(MmCtx::default()); +/// let req = GetWalletRequest {}; // This is optional +/// let result = get_wallet_rpc(ctx, req).await; +/// match result { +/// Ok(response) => println!("Wallet Name: {:?}", response.wallet_name), +/// Err(e) => println!("Error: {:?}", e), +/// } +/// ``` +pub async fn get_wallet_rpc( + ctx: MmArc, + req: Option, // Allowing `None` for when `params` is absent +) -> MmResult { + // If request is None (params missing), use the default value + let _req = req.unwrap_or_default(); + + let wallet_name = ctx + .wallet_name + .clone_or(None) + .ok_or(GetWalletError::WalletNameNotInitialized)?; + + Ok(GetWalletResponse { wallet_name }) +} diff --git a/mm2src/mm2_main/src/rpc/dispatcher/dispatcher.rs b/mm2src/mm2_main/src/rpc/dispatcher/dispatcher.rs index 5403392240..b8e028ac6f 100644 --- a/mm2src/mm2_main/src/rpc/dispatcher/dispatcher.rs +++ b/mm2src/mm2_main/src/rpc/dispatcher/dispatcher.rs @@ -6,6 +6,7 @@ use crate::lp_ordermatch::{best_orders_rpc_v2, orderbook_rpc_v2, start_simple_ma stop_simple_market_maker_bot}; use crate::lp_swap::swap_v2_rpcs::{active_swaps_rpc, my_recent_swaps_rpc, my_swap_status_rpc}; use crate::lp_wallet::get_mnemonic_rpc; +use crate::lp_wallet::get_wallet_rpc; use crate::rpc::rate_limiter::{process_rate_limit, RateLimitContext}; use crate::{lp_stats::{add_node_to_version_stat, remove_node_from_version_stat, start_version_stat_collection, stop_version_stat_collection, update_version_stat_collection}, @@ -190,6 +191,7 @@ async fn dispatcher_v2(request: MmRpcRequest, ctx: MmArc) -> DispatcherResult handle_mmrpc(ctx, request, get_raw_transaction).await, "get_shared_db_id" => handle_mmrpc(ctx, request, get_shared_db_id).await, "get_staking_infos" => handle_mmrpc(ctx, request, get_staking_infos).await, + "get_wallet" => handle_mmrpc(ctx, request, get_wallet_rpc).await, "max_maker_vol" => handle_mmrpc(ctx, request, max_maker_vol).await, "my_recent_swaps" => handle_mmrpc(ctx, request, my_recent_swaps_rpc).await, "my_swap_status" => handle_mmrpc(ctx, request, my_swap_status_rpc).await,