[][src]Function twitchchat::decode_one

pub fn decode_one(input: &str) -> Result<(usize, Message<&str>), ParseError>

Tries to decode one message, returning the amount of remaining data in the input

Example

A single message

let input = ":test!test@test JOIN #museun\r\n";
let (pos, message) = decode_one(&input).unwrap();
assert_eq!(pos, 0); // no more messages were found

let expected = messages::Raw {
    raw: ":test!test@test JOIN #museun\r\n",
    tags: Tags::default(),
    prefix: Some(decode::Prefix::User { nick: "test" }),
    command: "JOIN",
    args: "#museun",
    data: None,
};
assert_eq!(message, expected);

Multiple messages

let input = ":test!test@test JOIN #museun\r\n:test!test@test JOIN #shaken_bot\r\n";
let (pos, message) = decode_one(&input).unwrap();
assert_eq!(pos, 30); // another message probably starts at offset '30'

let expected = messages::Raw {
    raw: ":test!test@test JOIN #museun\r\n",
    tags: Tags::default(),
    prefix: Some(decode::Prefix::User { nick: "test" }),
    command: "JOIN",
    args: "#museun",
    data: None,
};
assert_eq!(message, expected);

// continue from where it left off
let (pos, message) = decode_one(&input[pos..]).unwrap();
assert_eq!(pos, 0); // no more messages were found

let expected = messages::Raw {
    raw: ":test!test@test JOIN #shaken_bot\r\n",
    tags: Tags::default(),
    prefix: Some(decode::Prefix::User { nick: "test" }),
    command: "JOIN",
    args: "#shaken_bot",
    data: None,
};
assert_eq!(message, expected);