1pub mod client;
2pub mod event;
3pub mod subscription;
4mod utils;
5
6use event::Event;
7use serde;
8use serde::{Deserialize, Serialize};
9use std::collections::HashMap;
10use subscription::SubscriptionSettings;
11use subscription::{CharacterSubscription, EventSubscription, WorldSubscription};
12use utils::{deserialize_from_str, serialize_optional_bool};
13
14pub const REALTIME_URL: &str = "wss://push.planetside2.com/streaming";
15
16#[derive(Serialize, Clone, Debug)]
17#[serde(rename_all = "camelCase")]
18pub enum Service {
19 Event,
20}
21
22#[derive(Serialize)]
23#[serde(tag = "action", rename_all = "camelCase")]
24enum Action {
25 Echo {
26 payload: serde_json::Value,
27 service: Service,
28 },
29 #[serde(rename_all = "camelCase")]
30 Subscribe(SubscriptionSettings),
31 #[serde(rename_all = "camelCase")]
32 ClearSubscribe {
33 #[serde(
34 skip_serializing_if = "Option::is_none",
35 serialize_with = "serialize_optional_bool"
36 )]
37 all: Option<bool>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 event_names: Option<EventSubscription>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 characters: Option<CharacterSubscription>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 worlds: Option<WorldSubscription>,
44 service: Service,
45 },
46 RecentCharacterIds {
47 service: Service,
48 },
49 RecentCharacterIdsCount {
50 service: Service,
51 },
52}
53
54#[derive(Deserialize, PartialEq, Debug)]
55#[serde(rename_all = "camelCase")]
56struct Subscription {
57 pub character_count: u64,
58 pub event_names: Vec<String>,
59 pub logical_and_characters_with_worlds: bool,
60 pub worlds: Vec<String>,
61}
62
63#[derive(Deserialize, PartialEq, Debug)]
64#[serde(tag = "type", rename_all = "camelCase")]
65enum Message {
66 ConnectionStateChanged {
67 #[serde(deserialize_with = "deserialize_from_str")]
68 connected: bool,
69 },
70 Heartbeat {
71 online: HashMap<String, String>,
73 },
74 ServiceMessage {
75 payload: Event,
76 },
77 ServiceStateChanged {
78 #[serde(deserialize_with = "deserialize_from_str")]
79 online: bool,
80 detail: String,
82 },
83 Subscription {
84 subscription: Subscription,
85 },
86}