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
/** A trait for parsing messages

# Example
```rust
# use twitchchat::*;
# use twitchchat::messages::*;
# use std::borrow::Cow;
let input = ":test!test@test JOIN #museun\r\n";
// decode and decode_one will parse a `Message` from a string
let message: decode::Message<'_> = decode::decode(&input).next().unwrap().unwrap();

// which can be used to parse into a specific message
let join: Join<'_> = Join::parse(&message).unwrap();
assert_eq!(join, Join {
    channel: Cow::Borrowed("#museun"),
    name: Cow::Borrowed("test")
});
```
*/
pub trait Parse<T>: Sized + private::ParseSealed<T> {
    /// Tries to parse the input as this message
    fn parse(input: T) -> Result<Self, crate::messages::InvalidMessage>;
}

mod private {
    pub trait ParseSealed<E> {}
    impl<T: crate::Parse<E>, E: Sized> ParseSealed<E> for T {}
}