1use serde::{Deserialize, Serialize};
4
5#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
6
7pub 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}