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 Event(EventNotification),
18 Joined(JoinedNotification),
20 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 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}