Clean up warnings and commented code
This commit was merged in pull request #425.
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
//!
|
||||
//! The application will run in its own loop, and websocket connections will
|
||||
//! send messages here via a channel.
|
||||
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
pin::Pin,
|
||||
@@ -186,7 +185,7 @@ impl App_ {
|
||||
|
||||
let game = match db.game(game_id)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(game_id.to_string()))),
|
||||
_ => return Ok(Err(Error::NotFound(game_id.to_string()))),
|
||||
};
|
||||
|
||||
let TabletopRow {
|
||||
@@ -272,7 +271,7 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let user = match db.user_by_username(&email).expect("") {
|
||||
Some(user) => user,
|
||||
None => return Ok(Err(Error::Unauthorized)),
|
||||
_ => return Ok(Err(Error::Unauthorized)),
|
||||
};
|
||||
|
||||
match db.get_password(&user.id).expect("") {
|
||||
@@ -352,7 +351,8 @@ impl App {
|
||||
) -> Result<Result<(), Error>, Fatal> {
|
||||
self.with_mutable_state_and_db(move |_, db| {
|
||||
Box::pin(async move {
|
||||
// TODO: race condition? potentially, if two different people have the invitation and try to create users at the same time. Narrow window, but should be resolved.
|
||||
// TODO: race condition? potentially, if two different people have the invitation
|
||||
// and try to create users at the same time. Narrow window, but should be resolved.
|
||||
if db.is_valid_invitation(&invitation)? {
|
||||
let user_id = UserId::default();
|
||||
let user = User {
|
||||
@@ -437,7 +437,7 @@ impl App {
|
||||
let (invitation_id, user_name, display_name, registration_state) =
|
||||
match state.registration_challenges.remove(®istration.user_id) {
|
||||
Some(state) => state,
|
||||
None => {
|
||||
_ => {
|
||||
eprintln!("invitation challenge does not exist");
|
||||
return Ok(Err(Error::Forbidden));
|
||||
}
|
||||
@@ -525,7 +525,7 @@ impl App {
|
||||
) -> Result<Result<User, Error>, Fatal> {
|
||||
let auth_state = match state.discoverable_challenges.remove(&auth_id) {
|
||||
Some(state) => state,
|
||||
None => return Ok(Err(Error::Forbidden)),
|
||||
_ => return Ok(Err(Error::Forbidden)),
|
||||
};
|
||||
|
||||
let Ok((user_id, credential_id)) = state
|
||||
@@ -580,7 +580,7 @@ impl App {
|
||||
Ok(Ok(Some(user)))
|
||||
}
|
||||
}
|
||||
Ok(None) => Ok(Ok(None)),
|
||||
Ok(_) => Ok(Ok(None)),
|
||||
Err(err) => Err(err.into()),
|
||||
}
|
||||
})
|
||||
@@ -629,7 +629,7 @@ impl App {
|
||||
Box::pin(async move {
|
||||
match db.game(&game_id) {
|
||||
Ok(Some(game)) => Ok(Ok(game)),
|
||||
Ok(None) => Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
Ok(_) => Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
Err(err) => Err(err.into()),
|
||||
}
|
||||
})
|
||||
@@ -661,92 +661,6 @@ impl App {
|
||||
.await
|
||||
}
|
||||
|
||||
/*
|
||||
pub async fn game_overview(
|
||||
&self,
|
||||
user_id: &UserId,
|
||||
game_id: &GameId,
|
||||
) -> Result<Result<GameOverview, Error>, Fatal> {
|
||||
let state = self.inner.read().await;
|
||||
let db = match state.database.open() {
|
||||
Ok(db) => db,
|
||||
Err(_) => return Ok(Err(Error::CannotOpen)),
|
||||
};
|
||||
|
||||
let game = match db.game(game_id)? {
|
||||
Some(game) => game,
|
||||
None => {
|
||||
return Ok(Err(Error::NotFound(format!("{:?}", game_id))));
|
||||
}
|
||||
};
|
||||
|
||||
if !game.contains_user(user_id) {
|
||||
return Ok(Err(Error::Forbidden));
|
||||
}
|
||||
()
|
||||
let gm = match db.user(&game.gm)? {
|
||||
Some(gm) => UserOverview::from(gm),
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", game.gm)))),
|
||||
};
|
||||
|
||||
let players: Vec<UserOverview> = game
|
||||
.players
|
||||
.iter()
|
||||
.map(|player_id| db.user(player_id))
|
||||
.collect::<Result<Vec<Option<User>>, database::Fatal>>()?
|
||||
.into_iter()
|
||||
.filter_map(|user| user.map(UserOverview::from))
|
||||
.collect();
|
||||
|
||||
eprintln!("user_id: {:?}", user_id);
|
||||
eprintln!("players: {:?}", players);
|
||||
|
||||
Ok(Ok(overview))
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
pub async fn game_overviews(&self) -> Result<Result<Vec<GameOverview>, Error>, Fatal> {
|
||||
let state = self.inner.read().await;
|
||||
let db = match state.database.open() {
|
||||
Ok(db) => db,
|
||||
Err(_) => return Ok(Err(Error::CannotOpen)),
|
||||
};
|
||||
|
||||
let games = db.games()?;
|
||||
let users = db
|
||||
.users()?
|
||||
.into_iter()
|
||||
.map(|user| (user.id.clone(), user))
|
||||
.collect::<HashMap<UserId, User>>();
|
||||
|
||||
let mut overviews: Vec<GameOverview> = vec![];
|
||||
for game in games {
|
||||
match db.game(&game.id)? {
|
||||
Some(game) => {
|
||||
println!("game: {:?}", game);
|
||||
// SAFETY: Games cannot be created unless the users involved exist. So no user ID can be present in
|
||||
// a game without being present here.
|
||||
let gm = UserOverview::from(users.get(&game.gm).unwrap().clone());
|
||||
let players = game
|
||||
.players
|
||||
.iter()
|
||||
.map(|player| UserOverview::from(users.get(player).unwrap().clone()))
|
||||
.collect();
|
||||
let mut overview = GameOverview::from(game);
|
||||
overview.gm = gm.id;
|
||||
overviews.push(overview);
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
for overview in overviews.iter() {
|
||||
println!("overview: {:?}", overview);
|
||||
}
|
||||
Ok(Ok(overviews))
|
||||
}
|
||||
*/
|
||||
|
||||
pub async fn create_game(
|
||||
&self,
|
||||
user_id: &UserId,
|
||||
@@ -848,82 +762,6 @@ impl App {
|
||||
.await
|
||||
}
|
||||
|
||||
/*
|
||||
pub async fn open_to_spectators(
|
||||
&self,
|
||||
user: &User,
|
||||
game_id: &GameId,
|
||||
) -> Result<Result<(), Error>, Fatal> {
|
||||
self.with_readonly_state_and_db(clone!((user, game_id), move |_, db| {
|
||||
Box::pin(async move {
|
||||
let mut game = match db.game(&game_id)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
};
|
||||
|
||||
if game.gm != user.id {
|
||||
return Ok(Err(Error::Forbidden));
|
||||
}
|
||||
|
||||
game.open_to_spectators = true;
|
||||
db.save_game(game)?;
|
||||
Ok(Ok(()))
|
||||
})
|
||||
}))
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn close_to_spectators(
|
||||
&self,
|
||||
user: &User,
|
||||
game_id: &GameId,
|
||||
) -> Result<Result<(), Error>, Fatal> {
|
||||
self.with_mutable_state_and_db(clone!((user, game_id), move |state, db| {
|
||||
Box::pin(async move {
|
||||
let mut game = match db.game(&game_id)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
};
|
||||
|
||||
if game.gm != user.id {
|
||||
return Ok(Err(Error::Forbidden));
|
||||
}
|
||||
|
||||
game.open_to_spectators = false;
|
||||
db.save_game(game)?;
|
||||
|
||||
// Find all spectator sockets for this game, send them SpectatorModeDisabled,
|
||||
// and remove them from the connections map
|
||||
let spectator_socket_ids: Vec<SocketId> = state
|
||||
.connections
|
||||
.iter()
|
||||
.filter_map(|(socket_id, socket)| {
|
||||
if let SocketState::Spectator(ref gid, _) = socket.state {
|
||||
if *gid == game_id {
|
||||
return Some(socket_id.clone());
|
||||
}
|
||||
}
|
||||
None
|
||||
})
|
||||
.collect();
|
||||
|
||||
for socket_id in &spectator_socket_ids {
|
||||
if let Some(socket) = state.connections.get(socket_id) {
|
||||
let _ = socket.sender.send(GameMessage::SpectatorModeDisabled).await;
|
||||
}
|
||||
}
|
||||
|
||||
for socket_id in spectator_socket_ids {
|
||||
state.connections.remove(&socket_id);
|
||||
}
|
||||
|
||||
Ok(Ok(()))
|
||||
})
|
||||
}))
|
||||
.await
|
||||
}
|
||||
*/
|
||||
|
||||
pub async fn set_tabletop_image(
|
||||
&self,
|
||||
user_id: &UserId,
|
||||
@@ -961,7 +799,7 @@ impl App {
|
||||
.await?;
|
||||
Ok(Ok(()))
|
||||
}
|
||||
None => Ok(Err(Error::NotFound(format!("{:?}", game_id.clone())))),
|
||||
_ => Ok(Err(Error::NotFound(format!("{:?}", game_id.clone())))),
|
||||
}
|
||||
})
|
||||
}))
|
||||
@@ -998,11 +836,11 @@ impl App {
|
||||
let game = match filter.game_id.clone() {
|
||||
Some(game_id) => match db.game(&game_id)? {
|
||||
Some(game) => game,
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::NotFound(game_id.as_str().to_string())));
|
||||
}
|
||||
},
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::Forbidden));
|
||||
}
|
||||
};
|
||||
@@ -1029,12 +867,12 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let _game = match db.game(&game_id)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
};
|
||||
|
||||
let scene = match db.scene(&scene_id)? {
|
||||
Some(scene) => scene,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
};
|
||||
|
||||
if scene.game != game_id {
|
||||
@@ -1101,7 +939,7 @@ impl App {
|
||||
|
||||
let saved_scene = match db.scene(&scene_id)? {
|
||||
Some(scene) => scene,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
};
|
||||
|
||||
if scene.game != saved_scene.game {
|
||||
@@ -1110,7 +948,7 @@ impl App {
|
||||
|
||||
let game = match db.game(&saved_scene.game)? {
|
||||
Some(game) => game,
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::NotFound(saved_scene.game.as_str().to_string())));
|
||||
}
|
||||
};
|
||||
@@ -1139,12 +977,12 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let scene = match db.scene(&scene_id)? {
|
||||
Some(scene) => scene,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
};
|
||||
|
||||
let game = match db.game(&scene.game)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(scene.game.as_str().to_string()))),
|
||||
_ => return Ok(Err(Error::NotFound(scene.game.as_str().to_string()))),
|
||||
};
|
||||
|
||||
if !user.admin && user.id != game.gm {
|
||||
@@ -1157,7 +995,7 @@ impl App {
|
||||
})?;
|
||||
let image = match images.into_iter().find(|image| image.id == image_id) {
|
||||
Some(image) => image,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", image_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", image_id.clone())))),
|
||||
};
|
||||
|
||||
if image.game != scene.game {
|
||||
@@ -1183,12 +1021,12 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let scene = match db.scene(&scene_id)? {
|
||||
Some(scene) => scene,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone())))),
|
||||
};
|
||||
|
||||
let game = match db.game(&scene.game)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(scene.game.as_str().to_string()))),
|
||||
_ => return Ok(Err(Error::NotFound(scene.game.as_str().to_string()))),
|
||||
};
|
||||
|
||||
if !user.admin && user.id != game.gm {
|
||||
@@ -1201,7 +1039,7 @@ impl App {
|
||||
})?;
|
||||
let image = match images.into_iter().find(|image| image.id == image_id) {
|
||||
Some(image) => image,
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", image_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", image_id.clone())))),
|
||||
};
|
||||
|
||||
if image.game != scene.game {
|
||||
@@ -1250,7 +1088,7 @@ impl App {
|
||||
})?;
|
||||
match images.into_iter().find(|img| img.url == image.url) {
|
||||
Some(image) => Ok(Ok(image)),
|
||||
None => Ok(Err(Error::NotFound(image.url))),
|
||||
_ => Ok(Err(Error::NotFound(image.url))),
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -1299,26 +1137,26 @@ impl App {
|
||||
Some(scene_id) => {
|
||||
let scene = match db.scene(&scene_id)? {
|
||||
Some(scene) => scene,
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::NotFound(format!("{:?}", scene_id.clone()))));
|
||||
}
|
||||
};
|
||||
|
||||
match db.game(&scene.game)? {
|
||||
Some(game) => game,
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::NotFound(scene.game.as_str().to_string())));
|
||||
}
|
||||
}
|
||||
}
|
||||
None => match filter.game_id.clone() {
|
||||
_ => match filter.game_id.clone() {
|
||||
Some(game_id) => match db.game(&game_id)? {
|
||||
Some(game) => game,
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::NotFound(game_id.as_str().to_string())));
|
||||
}
|
||||
},
|
||||
None => return Ok(Ok(vec![])),
|
||||
_ => return Ok(Ok(vec![])),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1349,9 +1187,9 @@ impl App {
|
||||
let game = match filter.game_id {
|
||||
Some(ref game_id) => match db.game(game_id)? {
|
||||
Some(game) => Some(game),
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", game_id)))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", game_id)))),
|
||||
},
|
||||
None => None,
|
||||
_ => None,
|
||||
};
|
||||
|
||||
let filter = match game {
|
||||
@@ -1365,7 +1203,7 @@ impl App {
|
||||
filter
|
||||
}
|
||||
}
|
||||
None => CharacterFilter {
|
||||
_ => CharacterFilter {
|
||||
user_id: filter.user_id,
|
||||
game_id: None,
|
||||
},
|
||||
@@ -1385,12 +1223,12 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let sheet = match db.character(&charsheet_id)? {
|
||||
Some(sheet) => sheet,
|
||||
None => return Ok(Err(Error::NotFound(charsheet_id.to_string()))),
|
||||
_ => return Ok(Err(Error::NotFound(charsheet_id.to_string()))),
|
||||
};
|
||||
|
||||
match db.game(&sheet.game_id)? {
|
||||
Some(_) => Ok(Ok(sheet)),
|
||||
None => Ok(Err(Error::NotFound(charsheet_id.to_string()))),
|
||||
_ => Ok(Err(Error::NotFound(charsheet_id.to_string()))),
|
||||
}
|
||||
})
|
||||
}))
|
||||
@@ -1406,7 +1244,7 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let game = match db.game(&game_id)? {
|
||||
Some(game) => game,
|
||||
None => return Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
_ => return Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
};
|
||||
|
||||
if !game.players.contains(&user_id) {
|
||||
@@ -1482,7 +1320,7 @@ impl App {
|
||||
return Ok(Err(Error::NotFound(game_id.as_str().to_owned())));
|
||||
}
|
||||
}
|
||||
Ok(None) => return Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
Ok(_) => return Ok(Err(Error::NotFound(game_id.as_str().to_owned()))),
|
||||
Err(err) => return Err(err.into()),
|
||||
};
|
||||
|
||||
@@ -1491,7 +1329,7 @@ impl App {
|
||||
Some(sheet) => {
|
||||
let sheet_game = match db.game(&sheet.game_id)? {
|
||||
Some(game) => game,
|
||||
None => {
|
||||
_ => {
|
||||
return Ok(Err(Error::NotFound(format!(
|
||||
"{:?}",
|
||||
character_id.clone()
|
||||
@@ -1504,7 +1342,7 @@ impl App {
|
||||
return Ok(Err(Error::NotFound(format!("{:?}", character_id.clone()))));
|
||||
}
|
||||
}
|
||||
None => return Ok(Err(Error::NotFound(format!("{:?}", character_id.clone())))),
|
||||
_ => return Ok(Err(Error::NotFound(format!("{:?}", character_id.clone())))),
|
||||
};
|
||||
|
||||
if character.user_id != user.id || character.game_id != game.id {
|
||||
@@ -1574,7 +1412,7 @@ impl App {
|
||||
old_card.location == Location::Tabletop
|
||||
|| card.location == Location::Tabletop
|
||||
}
|
||||
None => card.location == Location::Tabletop,
|
||||
_ => card.location == Location::Tabletop,
|
||||
};
|
||||
|
||||
if public_visibility_change {
|
||||
@@ -1628,7 +1466,7 @@ impl App {
|
||||
Box::pin(async move {
|
||||
let socket = match state.connections.get_mut(&socket_id) {
|
||||
Some(socket) => socket,
|
||||
None => {
|
||||
_ => {
|
||||
return None;
|
||||
}
|
||||
};
|
||||
@@ -1734,7 +1572,7 @@ impl App {
|
||||
);
|
||||
}
|
||||
}
|
||||
SocketState::Spectator(_, None) => {}
|
||||
SocketState::Spectator(_, _) => {}
|
||||
}
|
||||
|
||||
match (socket.state, msg) {
|
||||
@@ -1750,7 +1588,7 @@ impl App {
|
||||
.await;
|
||||
Ok(Some(GameMessage::Ok))
|
||||
}
|
||||
Ok(None) => Ok(Some(GameMessage::PermissionDenied)),
|
||||
Ok(_) => Ok(Some(GameMessage::PermissionDenied)),
|
||||
Err(err) => Ok(Some(GameMessage::Error(err.to_string()))),
|
||||
}
|
||||
}
|
||||
@@ -1801,78 +1639,6 @@ impl App {
|
||||
Ok(Some(GameMessage::PermissionDenied))
|
||||
}
|
||||
}
|
||||
/*
|
||||
(
|
||||
SocketState::Authenticated(_session_id, user),
|
||||
GameRequest::ChangeSpectatorMode(game_id, is_enabled),
|
||||
) => {
|
||||
if is_enabled {
|
||||
match self.open_to_spectators(&user, &game_id).await? {
|
||||
Ok(()) => {
|
||||
return Ok(Some(GameMessage::SpectatorModeEnabled));
|
||||
}
|
||||
Err(err) => {
|
||||
return Ok(Some(GameMessage::Error(err.to_string())));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
match self.close_to_spectators(&user, &game_id).await? {
|
||||
Ok(()) => {
|
||||
return Ok(Some(GameMessage::SpectatorModeDisabled));
|
||||
}
|
||||
Err(err) => {
|
||||
return Ok(Some(GameMessage::Error(err.to_string())));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
(
|
||||
SocketState::InGame(_session_id, user, game_id),
|
||||
GameRequest::ChangeSpectatorMode(req_game_id, is_enabled),
|
||||
) => {
|
||||
if game_id != req_game_id {
|
||||
return Ok(Some(GameMessage::InvalidState));
|
||||
}
|
||||
|
||||
if is_enabled {
|
||||
match self.open_to_spectators(&user, &game_id).await? {
|
||||
Ok(()) => Ok(Some(GameMessage::SpectatorModeEnabled)),
|
||||
Err(err) => Ok(Some(GameMessage::Error(err.to_string()))),
|
||||
}
|
||||
} else {
|
||||
match self.close_to_spectators(&user, &game_id).await? {
|
||||
Ok(()) => Ok(Some(GameMessage::SpectatorModeDisabled)),
|
||||
Err(err) => Ok(Some(GameMessage::Error(err.to_string()))),
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
(
|
||||
SocketState::InGame(_session_id, _user_id, _game_id),
|
||||
GameRequest::SetBackground(_),
|
||||
) => {
|
||||
todo!()
|
||||
}
|
||||
// Unauthenticated spectator trying to switch games
|
||||
(SocketState::Spectator(_, None), GameRequest::JoinGame(game_id)) => {
|
||||
// Use None for user to check if game is open to spectators
|
||||
match self.game(&game_id).await? {
|
||||
Ok(_game) => {
|
||||
// Game is open to spectators
|
||||
self.change_websocket_state(
|
||||
&socket_id,
|
||||
SocketState::Spectator(game_id, None),
|
||||
)
|
||||
.await;
|
||||
Ok(Some(GameMessage::Ok))
|
||||
}
|
||||
Err(_) => Ok(Some(GameMessage::PermissionDenied)),
|
||||
}
|
||||
}
|
||||
*/
|
||||
// Authenticated spectator trying to switch games (might become player)
|
||||
(
|
||||
SocketState::Spectator(_, Some((session_id, user_id))),
|
||||
@@ -1881,7 +1647,7 @@ impl App {
|
||||
// Retrieve the user from the session
|
||||
let user = match self.user(&user_id).await? {
|
||||
Ok(Some(user)) => user,
|
||||
Ok(None) => return Ok(Some(GameMessage::PermissionDenied)),
|
||||
Ok(_) => return Ok(Some(GameMessage::PermissionDenied)),
|
||||
Err(err) => return Ok(Some(GameMessage::Error(err.to_string()))),
|
||||
};
|
||||
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
use cool_asserts::assert_matches;
|
||||
use visions_types::{
|
||||
Character, CharacterFilter, CharacterId, GameId, GameMessage, Location, SceneId, Tabletop,
|
||||
UserId,
|
||||
};
|
||||
use visions_types::{Character, CharacterFilter, CharacterId, GameMessage, Location, Tabletop};
|
||||
|
||||
use crate::{
|
||||
CreateInvitation,
|
||||
@@ -13,9 +10,9 @@ use crate::{
|
||||
},
|
||||
run_command,
|
||||
test_utils::{
|
||||
ALENKO_ID, FOURTH_PHAROS_ID, JACK_ID, JOKER_ID, MISSING_LIBRARIANS_ID, PHILETHIS_INDEX_ID,
|
||||
TALI_ID, TSONI_ID, TestSupport, VAKARIAN_ID, WINTER_SOLSTICE_ID, WINTER_SOLSTICE_TITLE,
|
||||
get_character, list_characters, zell_base_data, zell_update_data,
|
||||
ALENKO_ID, JOKER_ID, MISSING_LIBRARIANS_ID, PHILETHIS_INDEX_ID, TALI_ID, TSONI_ID,
|
||||
TestSupport, VAKARIAN_ID, WINTER_SOLSTICE_ID, WINTER_SOLSTICE_TITLE, get_character,
|
||||
list_characters, zell_base_data, zell_update_data,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user