Files
server/src/methods/set_cloak.rs
T

39 lines
1.2 KiB
Rust

use mongodb::bson::doc;
use crate::response::{Error, Response, Result};
use super::{player, Session};
pub fn set_cloak(session: &Session, cloak: String) -> Result {
match player::player(session, session.local_player.id.clone())? {
Response::Player(crate::response::PlayerResponse::Player { cloaks, .. }) => {
if !cloaks.contains(&cloak) && !cloak.is_empty() {
return Err(Error::ValidationError(
format!("Player does not own cloak: {}", cloak)
));
}
session
.database
.players
.update_one(
doc! {
"uuid": session.local_player.id.clone(),
},
doc! {
"$set": {
"cloak": cloak.clone(),
},
},
)
.run()
.map_err(|e| Error::DatabaseError(
format!("Failed to update cloak: {}", e)
))?;
Ok(Response::Success)
}
_ => Err(Error::ValidationError("Invalid player data received".to_string())),
}
}