manabrew_protocol/transport/
mod.rs1use serde::{Deserialize, Serialize};
2use ts_rs::TS;
3
4use crate::display::DisplayEvent;
5use crate::game::GameViewDto;
6use crate::prompts::{PromptInput, PromptOutput};
7
8#[derive(Debug, Clone)]
9#[allow(clippy::large_enum_variant)]
10pub enum AgentMessage {
11 State(StateUpdate),
12 Display(DisplayEvent),
13 Prompt(AgentPrompt),
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize, TS)]
17#[serde(rename_all = "camelCase", deny_unknown_fields)]
18#[ts(export, export_to = "transport/messages.ts")]
19pub struct StateUpdate {
20 pub game_view: GameViewDto,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TS)]
24#[serde(tag = "type", rename_all = "camelCase")]
25#[ts(export, export_to = "transport/messages.ts")]
26pub enum DirectiveInput {
27 Concede,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, TS)]
31#[serde(tag = "kind", rename_all = "camelCase")]
32#[ts(export, export_to = "transport/messages.ts")]
33pub enum ClientToServerMessage {
34 Response { action: PromptOutput },
35 Directive { directive: DirectiveInput },
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize, TS)]
39#[serde(rename_all = "camelCase", deny_unknown_fields)]
40#[ts(export, export_to = "transport/messages.ts")]
41pub struct AgentPrompt {
42 pub prompt_id: u32,
43 #[serde(default, skip_serializing_if = "String::is_empty")]
44 pub deciding_player_id: String,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 #[ts(optional)]
47 pub source_card_id: Option<String>,
48 pub input: PromptInput,
49}