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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Serialize)]
pub struct TriggerEventData {
    pub name: String,
    pub channels: Vec<String>,
    pub data: String,
    pub socket_id: Option<String>,
}

/// When querying the state of Pusher channels, you can pass this in to specify
/// options.
pub type QueryParameters = Vec<(String, String)>;

/// Any event_ids returned by the HTTP API, if connected to certain clusters.
#[derive(Deserialize, Debug)]
pub struct TriggeredEvents {
    /// For certain clusters, event_ids will be returned upon triggering.
    /// Otherwise, this value will be `None`.
    pub event_ids: Option<HashMap<String, String>>,
}

/// A list of channels returned by the API.
#[derive(Deserialize, Debug)]
pub struct ChannelList {
    pub channels: HashMap<String, Channel>, // something fishy in practice
}

/// When authenticating presence-channels, this represents a particular member
/// of the channel. This object becomes associated with that user's subscription.
#[derive(Serialize)]
pub struct Member<'a> {
    /// Supply an id of the member
    pub user_id: &'a str,
    /// Supply any optional information to be associated with the member
    pub user_info: Option<HashMap<&'a str, &'a str>>,
}

/// This is returned upon validating that a webhook is indeed from Pusher,
/// carrying all the data received by that POST request.
#[derive(Deserialize, Debug)]
pub struct Webhook {
    /// The timestamp of the webhook
    pub time_ms: i64,
    /// The events received with the webhook
    pub events: Vec<HashMap<String, String>>,
}

/// This represents the data received upon querying the state of a Pusher channel.
#[derive(Deserialize, Debug)]
pub struct Channel {
    /// Is the channel occupied?
    pub occupied: Option<bool>,
    /// The number of users presently subscribed to the channel
    pub user_count: Option<i32>,
    /// For accounts with subscription-counting enabled, the number of users currently
    /// subscribed to the channel.
    pub subscription_count: Option<i32>,
}

/// The list of users subscribed to a presence channel, as returned by the Pusher
/// API.
#[derive(Deserialize, Debug)]
pub struct ChannelUserList {
    pub users: Vec<ChannelUser>,
}

/// A particular user who occupies a presence channel.
#[derive(Deserialize, Debug)]
pub struct ChannelUser {
    pub id: String,
}