urbit_http_api/
subscription.rs1use eventsource_threaded::event::Event;
2use json;
3
4pub type CreationID = u64;
6
7#[derive(Debug, Clone)]
9pub struct Subscription {
10 pub channel_uid: String,
12 pub creation_id: CreationID,
14 pub app: String,
16 pub path: String,
18 pub message_list: Vec<String>,
20}
21
22impl Subscription {
23 fn event_matches(&self, event: &Event) -> bool {
26 if let Some(json) = &json::parse(&event.data).ok() {
27 return self.creation_id.to_string() == json["id"].dump();
28 }
29 false
30 }
31
32 pub fn add_to_message_list(&mut self, event: &Event) -> Option<u64> {
36 if self.event_matches(&event) {
37 let json = &json::parse(&event.data).ok()?["json"];
38 if !json.is_null() {
39 self.message_list.push(json.dump());
40 return Some(self.message_list.len() as u64);
41 }
42 }
43 None
44 }
45
46 pub fn pop_message(&mut self) -> Option<String> {
49 if self.message_list.len() == 0 {
50 return None;
51 }
52 let messages = self.message_list.clone();
53 let (head, tail) = messages.split_at(1);
54 self.message_list = tail.to_vec();
55 Some(head.to_owned()[0].clone())
56 }
57}