league_client/
core.rs

1//! Core values
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
6
7/// The message that is sent from the client
8pub struct Incoming(pub usize, pub String, pub Message);
9
10impl Incoming {
11    pub fn into_message(self) -> Message {
12        self.2
13    }
14}
15
16#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
17pub enum EventType {
18    #[default]
19    Unknown,
20    Create,
21    Delete,
22    Update,
23}
24
25#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct Message {
28    pub data: serde_json::Value,
29    pub event_type: EventType,
30    pub uri: String,
31}
32
33#[cfg(test)]
34mod test {
35    use super::*;
36
37    #[test]
38    fn test_message() {
39        let raw = r#"[8,"OnJsonApiEvent",{
40            "data":{},
41            "eventType":"Update",
42            "uri":"/lol-champ-select/v1/skin-selector-info"
43            }]"#;
44
45        let data: Incoming = serde_json::from_str(raw).expect("should have a new message");
46        let msg = data.into_message();
47        assert_eq!(msg.event_type, EventType::Update);
48        assert_eq!(
49            msg.uri,
50            "/lol-champ-select/v1/skin-selector-info".to_string()
51        );
52    }
53}