#irc #message-parser #message #parser #validation #library

irc-command-micro

一个用于解析irc消息并提供稳定表示的库

17个版本

0.0.17 2024年6月22日
0.0.16 2024年6月15日

#1403 in 解析器实现

Download history 507/week @ 2024-06-03 1283/week @ 2024-06-10 256/week @ 2024-06-17 21/week @ 2024-06-24 102/week @ 2024-07-01

每月下载量102次

MIT许可

29KB
668

irc-command-micro

irc消息解析器的早期实现

解析简单的NAMES命令,CR和LF是可选的

use irc_command_micro::Message;

let message_bytes = vec![58, 65, 110, 111, 110, 32, 78, 65, 77, 69, 83];
let message = Message::parse(message_bytes, None).unwrap();
println!("{:?}", message);
//Message { source: Some("Anon"), command: NAMES, params: [] }

解析包含单个参数的NICK命令

let message_bytes = vec![58,65,110,111,110,32,78,73,67,75,32,68,97,118,101];
let message = Message::parse(message_bytes, None).unwrap();
println!("{:?}", message);
// Message { source: Some("Anon"), command: NICK, params: ["Dave"] }

以下是相同的NICK命令,但没有提供参数

let message_bytes = vec![58,65,110,111,110,32,78,73,67,75];
let message = Message::parse(message_bytes, None);
println!("{:?}", message);
// Err(MessageError { detail: NotEnoughParams })

现在客户端已发送NICK命令,但未正确大写(昵称)

let message_bytes = vec![58,65,110,111,110,32,78,105,99,107,32,68,97,118,101];
let message = Message::parse(message_bytes, None);
println!("{:?}", message);
// Err(MessageError { detail: InvalidCommand })

空白字符也将从开头和结尾删除

let message_bytes = vec![32, 32, 32, 32, 32, 32, 58, 65, 110, 111, 110, 32, 78, 73, 67, 75, 32, 65, 110, 111, 110, 50, 32, 32, 32, 32, 32, 13, 10];
let message = Message::parse(message_bytes, None);
println!("{:?}", message);
// Message { source: Some("Anon"), command: NICK, params: ["Anon2"] }

您还可以手动构建一个Message

let message = Message::new(Some("Anon"), IRCCommand::NAMES, Vec::new())

消息对象然后可以返回一个值以进行传输,CR和LF被添加,使返回值有效

let tcp_data: Vec<u8> = message.serialize()
// [58, 65, 110, 111, 110, 32, 78, 65, 77, 69, 83, 13, 10]

无运行时依赖