pabitell_lib/
protocol.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use uuid::Uuid;
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6#[serde(tag = "msg", rename_all = "snake_case")]
7pub enum Message {
8    Notification(NotificationMessage),
9    Request(RequestMessage),
10    Response(ResponseMessage),
11}
12
13#[derive(Serialize, Deserialize, Debug, Clone)]
14#[serde(tag = "notification", rename_all = "snake_case")]
15pub enum NotificationMessage {
16    /// Triggered event
17    Event(EventNotification),
18    /// Character joined
19    Joined(JoinedNotification),
20    /// World was updated
21    WorldUpdate,
22}
23
24#[derive(Serialize, Deserialize, Debug, Clone)]
25pub struct JoinedNotification {
26    pub character: Value,
27}
28
29#[derive(Serialize, Deserialize, Debug, Clone)]
30pub struct EventNotification {
31    pub event: Value,
32    pub event_count: usize,
33}
34
35#[derive(Serialize, Deserialize, Debug, Clone)]
36#[serde(tag = "request", rename_all = "snake_case")]
37pub enum RequestMessage {
38    /// World obtained
39    GetWorld(GetWorldRequest),
40    TriggerEvent(TriggerEventRequest),
41}
42
43#[derive(Serialize, Deserialize, Debug, Clone)]
44pub struct GetWorldRequest {
45    pub msg_id: Uuid,
46    pub world_id: Uuid,
47}
48
49#[derive(Serialize, Deserialize, Debug, Clone)]
50pub struct TriggerEventRequest {
51    pub msg_id: Uuid,
52    pub event: Value,
53    pub world_id: Uuid,
54}
55
56#[derive(Serialize, Deserialize, Debug, Clone)]
57#[serde(tag = "response", rename_all = "snake_case")]
58pub enum ResponseMessage {
59    GetWorld(GetWorldResponse),
60    TriggerEvent(TriggerEventResponse),
61}
62
63#[derive(Serialize, Deserialize, Debug, Clone)]
64pub struct GetWorldResponse {
65    pub msg_id: Uuid,
66    pub world: Option<Value>,
67}
68
69#[derive(Serialize, Deserialize, Debug, Clone)]
70pub struct TriggerEventResponse {
71    pub msg_id: Uuid,
72    pub success: bool,
73}