twitch_message

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)?; let msg: Message<'> = result.message;

match msg.kind { MessageKind::Ready => { let ready = msg.astypedmessage::().unwrap(); println!("connected as: {name}", name = ready.name); } MessageKind::Privmsg => { let pm = msg.astypedmessage::().unwrap(); println!("[{channel}] {sender}: {data}", channel = pm.channel, sender = pm.sender, data = pm.data ); } MessageKind::Ping => { let ping = msg.astypedmessage::().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");
}
_ => {}

} ```


Encoding

Format/Formattable

```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)?; 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"); ```

Encode/Encodable

```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)?; 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"); ```

Features

| 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