| Crates.io | ircv3_parse |
| lib.rs | ircv3_parse |
| version | 3.2.0 |
| created_at | 2024-02-29 09:22:49.935725+00 |
| updated_at | 2026-01-12 18:11:36.699347+00 |
| description | Zero-copy parser for IRCv3 messages |
| homepage | |
| repository | https://github.com/m3idnotfree/ircv3_parse.git |
| max_upload_size | |
| id | 1157586 |
| size | 199,834 |
A zero-copy IRC message parser with IRCv3 support
FromMessage, ToMessage) for easy message extraction and generationno_std compatible (with alloc)[dependencies]
ircv3_parse = { version = "3", features = ["derive"] }
Extract IRC message components into your custom types with the FromMessage derive macro:
use ircv3_parse::FromMessage;
#[derive(FromMessage)]
#[irc(command = "PRIVMSG")]
struct PrivMsg<'a> {
#[irc(source = "name")]
nick: &'a str,
#[irc(trailing)]
message: &'a str
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let input = ":nick!user@example.com PRIVMSG #channel :hi";
let msg: PrivMsg = ircv3_parse::from_str(input)?;
// Output: From: nick
println!("From: {}", msg.nick);
// Output: Message: hi
println!("Message: {}", msg.message);
Ok(())
}
Generate IRC messages from your custom types with the ToMessage derive macro:
use ircv3_parse::ToMessage;
#[derive(ToMessage)]
#[irc(command = "PRIVMSG", crlf)]
struct PrivMsg<'a> {
#[irc(tag)]
msgid: &'a str,
#[irc(param)]
channel: &'a str,
#[irc(trailing)]
message: &'a str
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let msg = PrivMsg {
msgid: "123",
channel: "#channel",
message: "hi"
};
let output = ircv3_parse::to_message(&msg)?;
// Output: @msgid=123 PRIVMSG #channel :hi\r\n
println!("{}", output);
Ok(())
}
std (default) - Standard library supportderive - Enables FromMessage and ToMessage derive macros (recommended)serde - Enables Serialize implementation for Messageno_std Support[dependencies]
ircv3_parse = { version = "3", default-features = false, features = ["derive"] }
This crate requires Rust 1.78 or later.
Notice: Each component parses first special character and follows the rule. Use validation methods for strict parsing.
@, separated by ;, followed by space:, format name!user@host or host, followed by space : (space + colon)Licensed under either of: