open_tavern/src/api/mod.rs

120 lines
2.3 KiB
Rust

pub mod game_actions;
pub mod login;
pub mod map_actions;
use game_actions::SpawnToken;
use serde::{Deserialize, Serialize};
use crate::game::{character_sheet::EntryType, chat_message::ChatMessage, entry::ActionResult};
#[derive(Serialize, Deserialize, Default, Debug)]
#[serde(rename_all = "snake_case")]
pub enum Request {
#[default]
Error,
// Connection requests
Login(login::LoginRequest),
Quit,
Kick(String),
Shutdown,
// Character stuff
CreateCharacter,
CharacterDisplay {
id: usize,
},
CharacterInputs {
id: usize,
},
CharacterGetField {
id: usize,
field: String,
},
CharacterSetField {
id: usize,
field: String,
val: EntryType,
},
CharacterAssign {
id: usize,
user: String,
},
// Chat requests
Message(ChatMessage),
GetChatHistory {
amount: usize,
from: usize,
},
GetLastMessages {
amount: usize,
},
// Map requests
CreateScene {
title: String,
},
SceneSetGrid {
grid_cell_size: f32,
grid_offset: [f32; 2],
},
SceneSetVisible {
scene: usize,
visible: bool,
},
GetScene {
id: usize,
},
GetSceneList,
GetTokens {
scene: usize,
},
SpawnToken {
map_id: usize,
character: String,
x: f32,
y: f32,
img_path: String,
},
MoveToken {
token_id: usize,
x: f32,
y: f32,
},
// Actions requests
ActionResult(ActionResult),
}
#[derive(Serialize, Clone, Debug)]
#[serde(rename_all = "snake_case")]
pub enum Response {
Error(RequestError),
Login(login::LoginResult),
Message(ChatMessage),
GetChatHistory(Vec<ChatMessage>),
ShowScene {
scene: usize,
tokens: Vec<SpawnToken>,
background: Option<String>,
grid_cell_size: Option<f32>,
grid_offset: Option<[f32; 2]>,
},
SceneList {
scenes: Vec<(usize, String)>,
},
MoveToken {
token_id: usize,
x: f32,
y: f32,
},
SpawnToken(SpawnToken),
CharacterCreated(usize),
Quit {
id: String,
},
Shutdown,
}
#[derive(Serialize, Debug, Clone)]
#[serde(rename_all = "snake_case")]
pub enum RequestError {
InvalidRequest,
AlreadyLoggedIn,
}