nucleus_rpc/
lib.rs

1use serde::{Deserialize, Serialize};
2use std::convert::TryFrom;
3
4pub mod log;
5pub mod nucleon;
6pub mod system;
7pub mod util;
8
9pub mod prelude {
10    pub use super::log::*;
11    pub use super::nucleon::*;
12    pub use super::system::*;
13    pub use super::{Message, MessageType, Recipient, Reply, Request};
14
15    pub use super::util::*;
16
17    pub use std::convert::TryFrom;
18
19    pub use serde_json::Value;
20}
21
22#[derive(Clone, Debug, Serialize, Deserialize)]
23pub enum Request {
24    System(system::SystemRequest),
25    Nucleon(nucleon::NucleonRequest),
26}
27
28#[derive(Clone, Debug, Serialize, Deserialize)]
29pub enum Reply {
30    System(system::SystemReply),
31    Nucleon(nucleon::NucleonReply),
32}
33
34#[derive(Clone, Debug, Serialize, Deserialize)]
35pub enum MessageType {
36    Request(Request),
37    Reply(Reply),
38    Log(log::LogMessage),
39}
40
41impl ReplyTrait for MessageType {}
42
43trait ReplyTrait {}
44
45#[derive(Clone, Debug, Serialize, Deserialize)]
46pub enum Recipient {
47    Unicast(String),
48    Broadcast,
49}
50
51#[derive(Clone, Debug, Serialize, Deserialize)]
52pub struct Message {
53    pub message: MessageType,
54    pub id: u8,
55    pub recipient: Recipient,
56    pub sender: String,
57}
58
59impl TryFrom<&str> for Message {
60    type Error = serde_json::Error;
61
62    #[inline]
63    fn try_from(msg: &str) -> Result<Self, Self::Error> {
64        serde_json::from_str::<Message>(msg)
65    }
66}
67
68impl TryFrom<&Message> for String {
69    type Error = serde_json::Error;
70
71    #[inline]
72    fn try_from(msg: &Message) -> Result<Self, Self::Error> {
73        serde_json::to_string(msg)
74    }
75}
76
77#[cfg(test)]
78mod tests {
79    #[test]
80    fn builder() {
81        use crate::prelude::*;
82        let _reply = Reply::System(SystemReply::Success);
83        // let m = MessageBuilder::new().build::<Reply>(reply);
84    }
85}