Skip to main content

bitwarden_ipc/discover/
mod.rs

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