Skip to main content

rings_rpc/
method.rs

1//! Rpc methods.
2
3use super::error::Error;
4use super::error::Result;
5
6/// supported methods.
7#[derive(Debug, Clone)]
8#[non_exhaustive]
9pub enum Method {
10    /// Connect peer with remote jsonrpc server url
11    ConnectPeerViaHttp,
12    /// Connect peer with remote peer's did
13    ConnectWithDid,
14    /// Connect peers from a seed file
15    ConnectWithSeed,
16    /// List all connected peers
17    ListPeers,
18    /// Create offer for manually handshake
19    CreateOffer,
20    /// Answer offer for manually handshake
21    AnswerOffer,
22    /// Accept Answer for manually handshake
23    AcceptAnswer,
24    /// Disconnect a peer
25    Disconnect,
26    /// SendBackendMessage
27    SendBackendMessage,
28    /// Send an E2E public-key handshake request
29    SendE2eHandshake,
30    /// Send an encrypted E2E message stream
31    SendE2eMessage,
32    /// Append data to topic
33    PublishMessageToTopic,
34    /// Fetch data of topic
35    FetchTopicMessages,
36    /// Register service
37    RegisterService,
38    /// Lookup service
39    LookupService,
40    /// Lookup online-node registry descriptors
41    LookupOnlineNodes,
42    /// Lookup application-layer onion exit descriptors
43    LookupOnionExits,
44    /// Build an onion route from live presence and exit descriptors
45    BuildOnionRoute,
46    /// Retrieve Node info
47    NodeInfo,
48    /// Retrieve local measurement counters for a peer
49    PeerMeasurement,
50    /// Retrieve local measurement counters for connected peers
51    ListPeerMeasurements,
52    /// Retrieve Node DID
53    NodeDid,
54}
55
56impl Method {
57    /// Return method's name as `&str`
58    pub fn as_str(&self) -> &str {
59        match self {
60            Method::ConnectPeerViaHttp => "connectPeerViaHttp",
61            Method::ConnectWithDid => "connectWithDid",
62            Method::ConnectWithSeed => "connectWithSeed",
63            Method::ListPeers => "listPeers",
64            Method::CreateOffer => "createOffer",
65            Method::AnswerOffer => "answerOffer",
66            Method::Disconnect => "disconnect",
67            Method::AcceptAnswer => "acceptAnswer",
68            Method::SendBackendMessage => "sendBackendMessage",
69            Method::SendE2eHandshake => "sendE2eHandshake",
70            Method::SendE2eMessage => "sendE2eMessage",
71            Method::PublishMessageToTopic => "publishMessageToTopic",
72            Method::FetchTopicMessages => "fetchTopicMessages",
73            Method::RegisterService => "registerService",
74            Method::LookupService => "lookupService",
75            Method::LookupOnlineNodes => "lookupOnlineNodes",
76            Method::LookupOnionExits => "lookupOnionExits",
77            Method::BuildOnionRoute => "buildOnionRoute",
78            Method::NodeInfo => "nodeInfo",
79            Method::PeerMeasurement => "peerMeasurement",
80            Method::ListPeerMeasurements => "listPeerMeasurements",
81            Method::NodeDid => "nodeDid",
82        }
83    }
84}
85
86#[allow(clippy::to_string_trait_impl)]
87impl ToString for Method {
88    fn to_string(&self) -> String {
89        self.as_str().to_owned()
90    }
91}
92
93impl TryFrom<&str> for Method {
94    type Error = crate::error::Error;
95
96    fn try_from(value: &str) -> Result<Self> {
97        Ok(match value {
98            "connectPeerViaHttp" => Self::ConnectPeerViaHttp,
99            "connectWithDid" => Self::ConnectWithDid,
100            "connectWithSeed" => Self::ConnectWithSeed,
101            "listPeers" => Self::ListPeers,
102            "createOffer" => Self::CreateOffer,
103            "answerOffer" => Self::AnswerOffer,
104            "disconnect" => Self::Disconnect,
105            "acceptAnswer" => Self::AcceptAnswer,
106            "sendBackendMessage" => Self::SendBackendMessage,
107            "sendE2eHandshake" => Self::SendE2eHandshake,
108            "sendE2eMessage" => Self::SendE2eMessage,
109            "publishMessageToTopic" => Method::PublishMessageToTopic,
110            "fetchTopicMessages" => Method::FetchTopicMessages,
111            "registerService" => Method::RegisterService,
112            "lookupService" => Method::LookupService,
113            "lookupOnlineNodes" => Method::LookupOnlineNodes,
114            "lookupOnionExits" => Method::LookupOnionExits,
115            "buildOnionRoute" => Method::BuildOnionRoute,
116            "nodeInfo" => Method::NodeInfo,
117            "peerMeasurement" => Method::PeerMeasurement,
118            "listPeerMeasurements" => Method::ListPeerMeasurements,
119            "nodeDid" => Method::NodeDid,
120            _ => return Err(Error::InvalidMethod),
121        })
122    }
123}