Crates.io | twitch_message |
lib.rs | twitch_message |
version | 0.1.2 |
source | src |
created_at | 2023-01-24 00:37:42.546379 |
updated_at | 2023-01-26 01:41:25.139917 |
description | A parser for Twitch.tv chat messages |
homepage | |
repository | https://github.com/museun/twitch_message |
max_upload_size | |
id | 766341 |
size | 204,107 |
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:
use twitch_message::messages::*;
// get some data from somewhere
let data: &str = read_line();
// parse returns a `ParseResult` which contains the remaining data (if any) and the parsed message
let result = twitch_message::parse(data)?;
let msg: Message<'_> = result.message;
match msg.kind {
MessageKind::Ready => {
let ready = msg.as_typed_message::<Ready>().unwrap();
println!("connected as: {name}", name = ready.name);
}
MessageKind::Privmsg => {
let pm = msg.as_typed_message::<Privmsg>().unwrap();
println!("[{channel}] {sender}: {data}",
channel = pm.channel,
sender = pm.sender,
data = pm.data
);
}
MessageKind::Ping => {
let ping = msg.as_typed_message::<Ping>().unwrap();
let resp = twitch_message::encode::pong(&ping.token);
// you can format data to various 'sinks'
use twitch_message::encode::Formattable;
let mut out = String::new();
resp.format(&mut out)?;
assert_eq!(out, "PONG :1234567890\r\n");
}
_ => {}
}
// this adds the # to the channel, if its missing
let pm = twitch_message::encode::privmsg("museun", "hello, world.");
// using `Formattable`
use twitch_message::encode::Formattable;
let mut buf = String::new();
pm.format(&mut buf)?;
assert_eq!(buf, "PRIVMSG #museun :hello, world.\r\n");
// using `Format`
use twitch_message::encode::Format;
let mut buf = String::new();
buf.format_msg(pm)?;
assert_eq!(buf, "PRIVMSG #museun :hello, world.\r\n");
// this adds the # to the channel, if its missing
let pm = twitch_message::encode::privmsg("museun", "hello, world.");
// using `Encodable`
use twitch_message::encode::Encodable;
let mut buf = Vec::new();
pm.encode(&mut buf)?;
assert_eq!(buf, b"PRIVMSG #museun :hello, world.\r\n");
// using `Encode`
use twitch_message::encode::Encode;
let mut buf = Vec::new();
buf.encode_msg(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