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    /// Append data to topic
30    PublishMessageToTopic,
31    /// Fetch data of topic
32    FetchTopicMessages,
33    /// Register service
34    RegisterService,
35    /// Lookup service
36    LookupService,
37    /// Retrieve Node info
38    NodeInfo,
39    /// Retrieve Node DID
40    NodeDid,
41}
42
43impl Method {
44    /// Return method's name as `&str`
45    pub fn as_str(&self) -> &str {
46        match self {
47            Method::ConnectPeerViaHttp => "connectPeerViaHttp",
48            Method::ConnectWithDid => "connectWithDid",
49            Method::ConnectWithSeed => "connectWithSeed",
50            Method::ListPeers => "listPeers",
51            Method::CreateOffer => "createOffer",
52            Method::AnswerOffer => "answerOffer",
53            Method::Disconnect => "disconnect",
54            Method::AcceptAnswer => "acceptAnswer",
55            Method::SendBackendMessage => "sendBackendMessage",
56            Method::PublishMessageToTopic => "publishMessageToTopic",
57            Method::FetchTopicMessages => "fetchTopicMessages",
58            Method::RegisterService => "registerService",
59            Method::LookupService => "lookupService",
60            Method::NodeInfo => "nodeInfo",
61            Method::NodeDid => "nodeDid",
62        }
63    }
64}
65
66#[allow(clippy::to_string_trait_impl)]
67impl ToString for Method {
68    fn to_string(&self) -> String {
69        self.as_str().to_owned()
70    }
71}
72
73impl TryFrom<&str> for Method {
74    type Error = crate::error::Error;
75
76    fn try_from(value: &str) -> Result<Self> {
77        Ok(match value {
78            "connectPeerViaHttp" => Self::ConnectPeerViaHttp,
79            "connectWithDid" => Self::ConnectWithDid,
80            "connectWithSeed" => Self::ConnectWithSeed,
81            "listPeers" => Self::ListPeers,
82            "createOffer" => Self::CreateOffer,
83            "answerOffer" => Self::AnswerOffer,
84            "disconnect" => Self::Disconnect,
85            "acceptAnswer" => Self::AcceptAnswer,
86            "sendBackendMessage" => Self::SendBackendMessage,
87            "publishMessageToTopic" => Method::PublishMessageToTopic,
88            "fetchTopicMessages" => Method::FetchTopicMessages,
89            "registerService" => Method::RegisterService,
90            "lookupService" => Method::LookupService,
91            "nodeInfo" => Method::NodeInfo,
92            "nodeDid" => Method::NodeDid,
93            _ => return Err(Error::InvalidMethod),
94        })
95    }
96}