1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#![feature(test)]

//! This crate implements a simple irc message wrapper.
//!
//! This project has 2 goals:
//!
//! - Ease the access to fields of the message without requiring the user to handle offsets and other IRC related things.
//! - Minimize memory foodprint. For this goal the `Message` struct only owns the `String` of the actual message. Any
//!     parts of the message and other structs only work on references of this string.
//!
//! Therefore this project expects the strings passed to the struct
//! constructors to be valid parts of the IRC standard.
//!
//! As reference the [RFC2812](https://tools.ietf.org/html/rfc2812) and some extensions
//! from [IRCv3](https://ircv3.net/) are used.
//!
//! # Support
//!
//! Current support (as of version '0.1.*'):
//!
//! - **Message**: Create read-only Message from `String` or `&str` and with a builder `Message::builder()`.
//! - **Tags**: access through the indexing operator and iterating over all tags.
//! - **Prefix**: Read-only access + Builder.
//! - **Parameters List**: Read-only access, Iteration over elements, separate access to trailing parameter.
//!
//! # Examples - for starters
//!
//! Simple example with static string:
//!
//! ```
//! use irc_rust::message::Message;
//!
//! let message = Message::from("@key1=value1;key2=value2 :name!user@host CMD param1 param2 :trailing");
//!
//! assert_eq!(message.to_string(), "@key1=value1;key2=value2 :name!user@host CMD param1 param2 :trailing");
//! ```
//!
//! While reading from standard input the `Message::new` method has to be used.
//!
//! ```
//! use irc_rust::message::Message;
//! use std::io::{BufRead, stdin};
//!
//! for line in stdin().lock().lines() {
//!     match line {
//!         Ok(line) => {
//!             let message = Message::new(line);
//!             println!("> Received command: {}", message.command());
//!         }
//!         Err(e) => {
//!             println!("got error; aborting: {}", e);
//!             break;
//!         }
//!     }
//! }
//!
//! ```

pub mod message;
pub mod tags;
pub mod prefix;
pub mod params;

#[cfg(test)]
mod test;

#[cfg(test)]
mod bench;