few updates
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
#[derive(Debug, Deserialize, Serialize, Clone)]
|
||||
pub struct Player {
|
||||
pub uuid: String,
|
||||
pub cloaks: Vec<String>,
|
||||
|
||||
+9
-3
@@ -8,6 +8,7 @@ use std::{
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use player::create;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
@@ -62,9 +63,14 @@ impl Session {
|
||||
local_player,
|
||||
};
|
||||
|
||||
let player = player::player(&session, uuid)?;
|
||||
|
||||
Ok((session, player))
|
||||
match player::player(&session, uuid) {
|
||||
Ok(player) => Ok((session, player)),
|
||||
Err(crate::response::Error::DatabaseError) => {
|
||||
let player = create(&session)?;
|
||||
Ok((session, player))
|
||||
}
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_request(&self, method: &str, params: &HashMap<String, String>) -> Result {
|
||||
|
||||
+24
-3
@@ -1,6 +1,9 @@
|
||||
use mongodb::bson::doc;
|
||||
|
||||
use crate::response::{Response, Result};
|
||||
use crate::{
|
||||
database::Player,
|
||||
response::{Response, Result},
|
||||
};
|
||||
|
||||
use super::Session;
|
||||
|
||||
@@ -12,11 +15,29 @@ pub fn player(session: &Session, uuid: String) -> Result {
|
||||
"uuid": uuid.clone(),
|
||||
})
|
||||
.run()?
|
||||
.deserialize_current()
|
||||
.unwrap();
|
||||
.deserialize_current()?;
|
||||
|
||||
Ok(Response::Player {
|
||||
cloak: player.cloak,
|
||||
uuid,
|
||||
cloaks: player.cloaks,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn create(session: &Session) -> Result {
|
||||
let uuid = session.local_player.id.clone();
|
||||
|
||||
let player = Player {
|
||||
cloak: "".to_string(),
|
||||
cloaks: Vec::new(),
|
||||
uuid: uuid.clone(),
|
||||
};
|
||||
|
||||
session.database.players.insert_one(player.clone()).run()?;
|
||||
|
||||
Ok(Response::Player {
|
||||
cloak: player.cloak,
|
||||
uuid,
|
||||
cloaks: player.cloaks,
|
||||
})
|
||||
}
|
||||
|
||||
+10
-2
@@ -4,7 +4,11 @@ pub type Result<T = Response> = std::result::Result<T, Error>;
|
||||
pub enum Response {
|
||||
Pong,
|
||||
Success,
|
||||
Player { cloak: String, uuid: String },
|
||||
Player {
|
||||
cloak: String,
|
||||
uuid: String,
|
||||
cloaks: Vec<String>,
|
||||
},
|
||||
}
|
||||
|
||||
impl std::fmt::Display for Response {
|
||||
@@ -12,7 +16,11 @@ impl std::fmt::Display for Response {
|
||||
match self {
|
||||
Response::Pong => write!(f, "Pong"),
|
||||
Response::Success => write!(f, "Success"),
|
||||
Response::Player { cloak, uuid } => write!(f, "@cloak={cloak}@uuid={uuid}"),
|
||||
Response::Player {
|
||||
cloak,
|
||||
uuid,
|
||||
cloaks,
|
||||
} => write!(f, "@cloak={cloak}@uuid={uuid}@cloaks={}", cloaks.join("$")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user