better formatted error messages

also reworked error messages so they create Strings and dont use `&'static str`'s anymore
This commit is contained in:
shockrah 2020-09-17 20:05:33 -07:00
parent 5e48fa1ab9
commit b673fc6ca1
3 changed files with 25 additions and 16 deletions

View File

@ -7,7 +7,14 @@ use crate::UBigInt;
#[macro_export] #[macro_export]
macro_rules! no_conn { macro_rules! no_conn {
($spec:literal) => { ($spec:literal) => {
format!("No connection could be established: {}", $spec) format!("[ CON Error ] : {}", $spec)
}
}
#[macro_export]
macro_rules! sql_err {
($spec:literal) => {
format!("[ SQL Error ] : {}", $spec)
} }
} }

View File

@ -25,7 +25,7 @@ pub enum Response<T> {
// Duplicate keys can sometimes fuck us over for inserts/update(why tf tho) // Duplicate keys can sometimes fuck us over for inserts/update(why tf tho)
Duplicate, Duplicate,
// Not sure what this will be used for but maybe its useful at some point // Not sure what this will be used for but maybe its useful at some point
Other(&'static str) Other(String)
} }

View File

@ -4,10 +4,10 @@ use mysql_async::error::Error as SqlError;
use async_trait::async_trait; use async_trait::async_trait;
use crate::Response; use crate::{Response, no_conn, sql_err};
use crate::{UBigInt, BigInt, Integer, VarChar}; use crate::{UBigInt, BigInt, Integer, VarChar};
use crate::common::{FromDB, NO_CONN_MSG}; use crate::common::{FromDB};
#[allow(dead_code)] // only because some fields are read by the user #[allow(dead_code)] // only because some fields are read by the user
pub struct Member { pub struct Member {
@ -36,7 +36,7 @@ impl FromDB<Member> for Member {
let db_res : Result<(Conn, Self::Row), SqlError> let db_res : Result<(Conn, Self::Row), SqlError>
= conn.first_exec(q, params!{"id" => id}).await; = conn.first_exec(q, params!{"id" => id}).await;
if let Ok((_, row)) = db_res { if let Ok((_, row)) = db_res {
match row { return match row {
Some(row) => Response::Row(Self { Some(row) => Response::Row(Self {
id: id, id: id,
secret: row.0, secret: row.0,
@ -48,19 +48,21 @@ impl FromDB<Member> for Member {
None => Response::Empty None => Response::Empty
} }
} }
else { return Response::Other(sql_err!("Fetch failed"));
return Response::Other("Query failed in Trait Member::get");
}
}
else {
return Response::Other(NO_CONN_MSG);
} }
return Response::Other(no_conn!("Member::FromDB::get"));
} }
async fn update(p: &Pool, row: Member) -> Response<Self> { async fn update(p: &Pool, row: Member) -> Response<Self> {
let q = r#"UPDATE members let q = r#"UPDATE members
SET status = :status, permissions = :perms, name = :name SET status = :status, permissions = :perms, name = :name
WHERE id = :id"#; WHERE id = :id"#;
// TODO: remoev this retarded extra network hit
// technically this is really nice for the user but ultimately it either works or it
// doesn't so like the fucks the point of doing some bs like this
// the next a client queries this they'll get whatever data is in the db
// likewise clients are going likely going to re-get this data since its been updated
// or at least should
if let Ok(conn) = p.get_conn().await { if let Ok(conn) = p.get_conn().await {
match Member::get(p, row.id).await { match Member::get(p, row.id).await {
Response::Row(_) => { Response::Row(_) => {
@ -74,15 +76,15 @@ impl FromDB<Member> for Member {
}).await; }).await;
match db_result { match db_result {
Ok(_) => return Response::Success, Ok(_) => return Response::Success,
Err(_) => return Response::Other("Could not update yet entry was found") Err(_) => return Response::Other(sql_err!("WARN member found | Member::FromDB::update failed - "))
} }
}, },
Response::Empty => return Response::Empty, Response::Empty => return Response::Empty,
Response::Other(msg) => return Response::Other(msg), Response::Other(msg) => return Response::Other(msg),
_ => return Response::Other("Magical failure") _ => return Response::Other(sql_err!("Member::FromD::update Bro i dont even"))
} }
} }
return Response::Other(NO_CONN_MSG); return Response::Other(no_conn!("Member::FromDB::update"));
} }
async fn delete(p: &Pool, id: UBigInt) -> Response<Self> { async fn delete(p: &Pool, id: UBigInt) -> Response<Self> {
@ -95,13 +97,13 @@ impl FromDB<Member> for Member {
if let Ok(conn) = db_result { if let Ok(conn) = db_result {
return match conn.prep_exec("", params!{"id" => id}).await { return match conn.prep_exec("", params!{"id" => id}).await {
Ok(_) => Response::Success, Ok(_) => Response::Success,
Err(_) => Response::Other("Could not delete entry") Err(_) => Response::Other(sql_err!("Member::FromDB::delete"))
} }
} }
return Response::Success return Response::Success
}, },
Response::Empty => return Response::Empty, Response::Empty => return Response::Empty,
_ => return Response::Other("Query failed in Member::delete") _ => return Response::Other(sql_err!("Member::FromDB::delete | another stupid get happened delid this"))
} }
} }