Skip to main content

rings_rpc/
method.rs

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