/* This file is part of DarkFi (https://dark.fi)
*
* Copyright (C) 2020-2022 Dyne.org foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
use std::io;
use darkfi_serial::{Decodable, Encodable, ReadExt, SerialDecodable, SerialEncodable};
#[derive(SerialEncodable, SerialDecodable, Clone)]
pub struct PrivMsgEvent {
pub nick: String,
pub msg: String,
pub target: String,
}
#[derive(Clone)]
pub enum EventAction {
PrivMsg(PrivMsgEvent),
}
impl std::string::ToString for PrivMsgEvent {
fn to_string(&self) -> String {
format!(":{}!anon@dark.fi PRIVMSG {} :{}\r\n", self.nick, self.target, self.msg)
}
}
impl Encodable for EventAction {
fn encode(&self, mut s: S) -> core::result::Result {
match self {
Self::PrivMsg(event) => {
let mut len = 0;
len += 0u8.encode(&mut s)?;
len += event.encode(s)?;
Ok(len)
}
}
}
}
impl Decodable for EventAction {
fn decode(mut d: D) -> core::result::Result {
let type_id = d.read_u8()?;
match type_id {
0 => Ok(Self::PrivMsg(PrivMsgEvent::decode(d)?)),
_ => Err(io::Error::new(io::ErrorKind::Other, "Bad type ID byte for Event")),
}
}
}