implemented notifications and messages

This commit is contained in:
mb 2022-08-22 15:54:36 +03:00
parent 28a3812812
commit 695ac6daa2
12 changed files with 1023 additions and 315 deletions

View file

@ -13,13 +13,45 @@ pub struct ChannelCreate {
#[derive(Debug)]
pub struct ChannelDelete {
pub channel_id: u64,
pub id: u64,
}
#[derive(Debug)]
pub struct ChannelGetName {
pub id: u64,
}
#[derive(Debug)]
pub struct ChannelSetName {
pub id: u64,
pub name: String,
}
#[derive(Debug)]
pub struct MessageList {
pub channel_id: u64,
}
#[derive(Debug)]
pub struct MessageCreate {
pub channel_id: u64,
pub content: String,
}
#[derive(Debug)]
pub struct MessageDelete {
pub channel_id: u64,
pub id: u64,
}
#[derive(Debug)]
pub struct MessageGetContent {
pub channel_id: u64,
pub id: u64,
}
#[derive(Debug)]
pub struct MessageSetContent {
pub channel_id: u64,
pub id: u64,
pub content: String,
}
#[derive(Debug)]
pub enum ClientRequest {
@ -28,6 +60,12 @@ pub enum ClientRequest {
ChannelCreate(ChannelCreate),
ChannelDelete(ChannelDelete),
ChannelGetName(ChannelGetName),
ChannelSetName(ChannelSetName),
MessageList(MessageList),
MessageCreate(MessageCreate),
MessageDelete(MessageDelete),
MessageGetContent(MessageGetContent),
MessageSetContent(MessageSetContent),
}
impl ClientRequest {
@ -44,11 +82,41 @@ impl ClientRequest {
}
pub fn new_channel_delete(channel_id: u64) -> Self {
Self::ChannelDelete(ChannelDelete { channel_id })
Self::ChannelDelete(ChannelDelete { id: channel_id })
}
pub fn new_channel_get_name(channel_id: u64) -> Self {
Self::ChannelGetName(ChannelGetName { channel_id })
Self::ChannelGetName(ChannelGetName { id: channel_id })
}
pub fn new_channel_set_name(channel_id: u64, name: String) -> Self {
Self::ChannelSetName(ChannelSetName {
id: channel_id,
name,
})
}
pub fn new_message_list(channel_id: u64) -> Self {
Self::MessageList(MessageList { channel_id })
}
pub fn new_message_create(channel_id: u64, content: String) -> Self {
Self::MessageCreate(MessageCreate {
channel_id,
content,
})
}
pub fn new_message_delete(channel_id: u64, id: u64) -> Self {
Self::MessageDelete(MessageDelete { channel_id, id })
}
pub fn new_message_get_content(channel_id: u64, id: u64) -> Self {
Self::MessageGetContent(MessageGetContent { channel_id, id })
}
pub fn new_message_set_content(channel_id: u64, id: u64, content: String) -> Self {
Self::MessageSetContent(MessageSetContent {
channel_id,
id,
content,
})
}
pub fn try_parse(line: &str) -> Option<Self> {
@ -58,8 +126,42 @@ impl ClientRequest {
ping { content } => Self::Ping(Ping { content }),
channel_list {} => Self::ChannelList(ChannelList {}),
channel_create { name } => Self::ChannelCreate(ChannelCreate { name }),
channel_delete { channel_id } => Self::ChannelDelete(ChannelDelete { channel_id }),
channel_get_name { channel_id } => Self::ChannelGetName(ChannelGetName { channel_id }),
channel_delete { id: channel_id } => {
Self::ChannelDelete(ChannelDelete { id: channel_id })
}
channel_get_name { id: channel_id } => {
Self::ChannelGetName(ChannelGetName { id: channel_id })
}
channel_set_name {
id: channel_id,
name,
} => Self::ChannelSetName(ChannelSetName {
id: channel_id,
name,
}),
message_list { channel_id } => Self::MessageList(MessageList { channel_id }),
message_create {
channel_id,
content,
} => Self::MessageCreate(MessageCreate {
channel_id,
content,
}),
message_delete { id, channel_id } => {
Self::MessageDelete(MessageDelete { id, channel_id })
}
message_get_content { id, channel_id } => {
Self::MessageGetContent(MessageGetContent { id, channel_id })
}
message_set_content {
id,
channel_id,
content,
} => Self::MessageSetContent(MessageSetContent {
content,
id,
channel_id,
}),
};
Some(mapped)
}
@ -70,8 +172,42 @@ impl ClientRequest {
Self::Ping(Ping { content }) => ping { content },
Self::ChannelList(ChannelList {}) => repr::Command::channel_list {},
Self::ChannelCreate(ChannelCreate { name }) => channel_create { name },
Self::ChannelDelete(ChannelDelete { channel_id }) => channel_delete { channel_id },
Self::ChannelGetName(ChannelGetName { channel_id }) => channel_get_name { channel_id },
Self::ChannelDelete(ChannelDelete { id: channel_id }) => {
channel_delete { id: channel_id }
}
Self::ChannelGetName(ChannelGetName { id: channel_id }) => {
channel_get_name { id: channel_id }
}
Self::ChannelSetName(ChannelSetName {
id: channel_id,
name,
}) => channel_set_name {
id: channel_id,
name,
},
Self::MessageList(MessageList { channel_id }) => message_list { channel_id },
Self::MessageCreate(MessageCreate {
channel_id,
content,
}) => message_create {
channel_id,
content,
},
Self::MessageDelete(MessageDelete { id, channel_id }) => {
message_delete { id, channel_id }
}
Self::MessageGetContent(MessageGetContent { id, channel_id }) => {
message_get_content { id, channel_id }
}
Self::MessageSetContent(MessageSetContent {
content,
id,
channel_id,
}) => message_set_content {
id,
channel_id,
content,
},
};
serde_json::to_string(&mapped).unwrap()
}
@ -85,10 +221,42 @@ mod repr {
#[derive(Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Command {
ping { content: String },
ping {
content: String,
},
channel_list {},
channel_create { name: String },
channel_delete { channel_id: u64 },
channel_get_name { channel_id: u64 },
channel_create {
name: String,
},
channel_delete {
id: u64,
},
channel_get_name {
id: u64,
},
channel_set_name {
id: u64,
name: String,
},
message_list {
channel_id: u64,
},
message_create {
channel_id: u64,
content: String,
},
message_delete {
channel_id: u64,
id: u64,
},
message_get_content {
channel_id: u64,
id: u64,
},
message_set_content {
channel_id: u64,
id: u64,
content: String,
},
}
}

View file

@ -1,19 +1,78 @@
#[derive(Debug)]
pub struct Pong {
pub content: String,
}
#[derive(Debug)]
pub struct ChannelList {
pub channels: Vec<u64>,
}
#[derive(Debug)]
pub struct ChannelGetName {
pub id: u64,
pub name: Option<String>,
}
#[derive(Debug)]
pub struct ChannelCreate {
pub id: u64,
pub name: String,
}
#[derive(Debug)]
pub struct ChannelDelete {
pub id: u64,
}
#[derive(Debug)]
pub struct ChannelSetName {
pub id: u64,
pub name: String,
}
#[derive(Debug)]
pub struct MessageList {
pub channel_id: u64,
pub messages: Vec<u64>,
}
#[derive(Debug)]
pub struct MessageCreate {
pub channel_id: u64,
pub id: u64,
pub content: String,
}
#[derive(Debug)]
pub struct MessageDelete {
pub channel_id: u64,
pub id: u64,
}
#[derive(Debug)]
pub struct MessageGetContent {
pub channel_id: u64,
pub id: u64,
pub content: Option<String>,
}
#[derive(Debug)]
pub struct MessageSetContent {
pub channel_id: u64,
pub id: u64,
pub content: String,
}
#[derive(Debug)]
pub enum ServerRequest {
Pong(Pong),
ChannelCreate(ChannelCreate),
ChannelDelete(ChannelDelete),
ChannelList(ChannelList),
ChannelGetName(ChannelGetName),
ChannelSetName(ChannelSetName),
MessageList(MessageList),
MessageCreate(MessageCreate),
MessageDelete(MessageDelete),
MessageGetContent(MessageGetContent),
MessageSetContent(MessageSetContent),
}
impl ServerRequest {
@ -29,6 +88,52 @@ impl ServerRequest {
Self::ChannelGetName(ChannelGetName { name, id })
}
pub fn new_channel_create(id: u64, name: String) -> Self {
Self::ChannelCreate(ChannelCreate { id, name })
}
pub fn new_channel_delete(id: u64) -> Self {
Self::ChannelDelete(ChannelDelete { id })
}
pub fn new_channel_set_name(id: u64, name: String) -> Self {
Self::ChannelSetName(ChannelSetName { id, name })
}
pub fn new_message_list(channel_id: u64, messages: Vec<u64>) -> Self {
Self::MessageList(MessageList {
channel_id,
messages,
})
}
pub fn new_message_create(channel_id: u64, id: u64, content: String) -> Self {
Self::MessageCreate(MessageCreate {
channel_id,
content,
id,
})
}
pub fn new_message_delete(channel_id: u64, id: u64) -> Self {
Self::MessageDelete(MessageDelete { channel_id, id })
}
pub fn new_message_get_content(channel_id: u64, id: u64, content: Option<String>) -> Self {
Self::MessageGetContent(MessageGetContent {
channel_id,
content,
id,
})
}
pub fn new_message_set_content(channel_id: u64, id: u64, content: String) -> Self {
Self::MessageSetContent(MessageSetContent {
channel_id,
content,
id,
})
}
pub fn try_parse(line: &str) -> Option<Self> {
use repr::Command::*;
let command: repr::Command = serde_json::from_str(line).ok()?;
@ -36,6 +141,46 @@ impl ServerRequest {
pong { content } => Self::Pong(Pong { content }),
channel_list { channels } => Self::ChannelList(ChannelList { channels }),
channel_get_name { id, name } => Self::ChannelGetName(ChannelGetName { id, name }),
channel_create { id, name } => Self::ChannelCreate(ChannelCreate { id, name }),
channel_set_name { id, name } => Self::ChannelSetName(ChannelSetName { id, name }),
channel_delete { id } => Self::ChannelDelete(ChannelDelete { id }),
message_list {
channel_id,
messages,
} => Self::MessageList(MessageList {
channel_id,
messages,
}),
message_create {
channel_id,
id,
content,
} => Self::MessageCreate(MessageCreate {
channel_id,
content,
id,
}),
message_delete { channel_id, id } => {
Self::MessageDelete(MessageDelete { channel_id, id })
}
message_get_content {
channel_id,
id,
content,
} => Self::MessageGetContent(MessageGetContent {
channel_id,
content,
id,
}),
message_set_content {
channel_id,
id,
content,
} => Self::MessageSetContent(MessageSetContent {
channel_id,
content,
id,
}),
};
Some(mapped)
}
@ -46,6 +191,47 @@ impl ServerRequest {
Self::Pong(Pong { content }) => pong { content },
Self::ChannelList(ChannelList { channels }) => channel_list { channels },
Self::ChannelGetName(ChannelGetName { id, name }) => channel_get_name { id, name },
Self::ChannelCreate(ChannelCreate { id, name }) => channel_create { id, name },
Self::ChannelSetName(ChannelSetName { id, name }) => channel_set_name { id, name },
Self::ChannelDelete(ChannelDelete { id }) => channel_delete { id },
Self::MessageList(MessageList {
channel_id,
messages,
}) => message_list {
channel_id,
messages,
},
Self::MessageCreate(MessageCreate {
channel_id,
content,
id,
}) => message_create {
channel_id,
id,
content,
},
Self::MessageDelete(MessageDelete { channel_id, id }) => {
message_delete { channel_id, id }
}
Self::MessageGetContent(MessageGetContent {
channel_id,
content,
id,
}) => message_get_content {
channel_id,
id,
content,
},
Self::MessageSetContent(MessageSetContent {
channel_id,
content,
id,
}) => message_set_content {
channel_id,
id,
content,
},
};
serde_json::to_string(&mapped).unwrap()
}
@ -59,8 +245,49 @@ mod repr {
#[derive(Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Command {
pong { content: String },
channel_list { channels: Vec<u64> },
channel_get_name { id: u64, name: Option<String> },
pong {
content: String,
},
channel_list {
channels: Vec<u64>,
},
channel_get_name {
id: u64,
name: Option<String>,
},
channel_create {
id: u64,
name: String,
},
channel_delete {
id: u64,
},
channel_set_name {
id: u64,
name: String,
},
message_list {
channel_id: u64,
messages: Vec<u64>,
},
message_create {
channel_id: u64,
id: u64,
content: String,
},
message_delete {
channel_id: u64,
id: u64,
},
message_get_content {
channel_id: u64,
id: u64,
content: Option<String>,
},
message_set_content {
channel_id: u64,
id: u64,
content: String,
},
}
}