Read the docs for more detailed information
This is a crate to parse chat messages from https://www.twitch.tv
This crate does not provide any I/O rather just parsing of a &str
into typed messages.
A quick walkthrough:
```rust use twitchmessage::messages::*; // get some data from somewhere let data: &str = readline();
// parse returns a ParseResult
which contains the remaining data (if any) and the parsed message
let result = twitchmessage::parse(data).unwrap();
let msg: Message<'> = result.message;
match msg.kind {
MessageKind::Ready => {
let ready = msg.astypedmessage::
// you can format data to various 'sinks'
use twitch_message::encode::Formattable;
let mut out = String::new();
resp.format(&mut out).unwrap();
assert_eq!(out, "PONG :1234567890\r\n");
}
_ => {}
} ```
```rust // this adds the # to the channel, if its missing let pm = twitch_message::encode::privmsg("museun", "hello, world.");
// using Formattable
use twitchmessage::encode::Formattable;
let mut buf = String::new();
pm.format(&mut buf).unwrap();
asserteq!(buf, "PRIVMSG #museun :hello, world.\r\n");
// using Format
use twitchmessage::encode::Format;
let mut buf = String::new();
buf.formatmsg(pm);
assert_eq!(buf, "PRIVMSG #museun :hello, world.\r\n");
```
```rust // this adds the # to the channel, if its missing let pm = twitch_message::encode::privmsg("museun", "hello, world.");
// using Encodable
use twitchmessage::encode::Encodable;
let mut buf = Vec::new();
pm.encode(&mut buf).unwrap();
asserteq!(buf, b"PRIVMSG #museun :hello, world.\r\n");
// using Encode
use twitchmessage::encode::Encode;
let mut buf = Vec::new();
buf.encodemsg(pm);
assert_eq!(buf, b"PRIVMSG #museun :hello, world.\r\n");
```
| Feature | Description |
| ----------- | -------------------------------------------------------------------------------------------------- |
| default | there are no default features |
| ping | enables the [PingTracker
] |
| std | enables the Encode
and Encodable
traits |
| serde | enables [serde
] derives on the types |
| hashbrown | enables using [hashbrown
] for the internal HashMap
|
| sync | enables using [std::sync::Mutex
] over [std::cell::RefCell
] see sharing data
|
| parking_lot | same as sync
except uses a [parking_lot::Mutex
] |
Twitch chat reference: link
License: 0BSD