iroh_node_util/rpc/proto/
node.rs

1//! RPC calls to control a generic node.
2use std::collections::BTreeMap;
3
4use nested_enum_utils::enum_conversions;
5use quic_rpc_derive::rpc_requests;
6use serde::{Deserialize, Serialize};
7
8use super::{RpcResult, RpcService};
9use crate::rpc::client::net::NodeStatus;
10
11#[allow(missing_docs)]
12#[derive(strum::Display, Debug, Serialize, Deserialize)]
13#[enum_conversions(super::Request)]
14#[rpc_requests(RpcService)]
15pub enum Request {
16    #[rpc(response = RpcResult<NodeStatus>)]
17    Status(StatusRequest),
18    #[rpc(response = RpcResult<StatsResponse>)]
19    Stats(StatsRequest),
20    #[rpc(response = ())]
21    Shutdown(ShutdownRequest),
22}
23
24#[allow(missing_docs)]
25#[derive(strum::Display, Debug, Serialize, Deserialize)]
26#[enum_conversions(super::Response)]
27pub enum Response {
28    Status(RpcResult<NodeStatus>),
29    Stats(RpcResult<StatsResponse>),
30    Shutdown(()),
31}
32
33/// A request to shutdown the node
34#[derive(Serialize, Deserialize, Debug)]
35pub struct ShutdownRequest {
36    /// Force shutdown
37    pub force: bool,
38}
39
40/// A request to get information about the status of the node.
41#[derive(Serialize, Deserialize, Debug)]
42pub struct StatusRequest;
43
44/// Get stats for the running Iroh node
45#[derive(Serialize, Deserialize, Debug)]
46pub struct StatsRequest {}
47
48/// Counter stats
49#[derive(Serialize, Deserialize, Debug)]
50pub struct CounterStats {
51    /// The counter value
52    pub value: u64,
53    /// The counter description
54    pub description: String,
55}
56
57/// Response to [`StatsRequest`]
58#[derive(Serialize, Deserialize, Debug)]
59pub struct StatsResponse {
60    /// Map of statistics
61    pub stats: BTreeMap<String, CounterStats>,
62}