Skip to main content

bitwarden_ipc/discover/
mod.rs

1#![doc = include_str!("README.md")]
2
3use serde::{Deserialize, Serialize};
4#[cfg(feature = "wasm")]
5use {tsify::Tsify, wasm_bindgen::prelude::*};
6
7use crate::{RpcHandler, rpc::request::RpcRequest};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10/// A request to discover/ping a client.
11pub struct DiscoverRequest;
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14#[cfg_attr(feature = "wasm", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))]
15/// The response to a discover/ping request.
16pub struct DiscoverResponse {
17    /// The version of the client that responded to the discover request.
18    pub version: String,
19}
20
21impl RpcRequest for DiscoverRequest {
22    type Response = DiscoverResponse;
23
24    const NAME: &str = "DiscoverRequest";
25}
26
27/// A simple handler for the `DiscoverRequest` that always returns the same response.
28/// Used to enable discovery/ping functionality and provide version information.
29pub struct DiscoverHandler {
30    response: DiscoverResponse,
31}
32
33impl DiscoverHandler {
34    /// Creates a new `DiscoverHandler` with the given response.
35    pub fn new(response: DiscoverResponse) -> Self {
36        Self { response }
37    }
38}
39
40impl RpcHandler for DiscoverHandler {
41    type Request = DiscoverRequest;
42
43    async fn handle(&self, _request: Self::Request) -> DiscoverResponse {
44        self.response.clone()
45    }
46}