Browse Source

usersetting sql serializer

pbs
Jake Probst 5 years ago
parent
commit
7c3bcb75c9
  1. 52
      src/login/models.rs

52
src/login/models.rs

@ -1,9 +1,22 @@
use std::time::SystemTime; use std::time::SystemTime;
use std::io::Write;
//use diesel::sql_types::Timestamp; //use diesel::sql_types::Timestamp;
use diesel::{Insertable, Queryable, Identifiable, Associations};
use diesel::{Insertable, Queryable, Identifiable, Associations, AsExpression, FromSqlRow};
//use bcrypt::{DEFAULT_COST, hash}; //use bcrypt::{DEFAULT_COST, hash};
//use diesel::serialize::ToSql;
use libpso::
use diesel::pg::Pg;
use diesel::sql_types;
use diesel::deserialize::{self, FromSql};
use diesel::serialize::{self, ToSql, Output, IsNull};
use diesel::backend::Backend;
use libpso::character::settings;
#[derive(Debug, AsExpression, FromSqlRow)]
#[sql_type="sql_types::Binary"]
pub struct EUserSettings(pub settings::UserSettings);
//const ELSEWHERE_COST: u32 = bcrypt::DEFAULT_COST;
const ELSEWHERE_COST: u32 = 5;
use elseware::schema::*; use elseware::schema::*;
@ -28,7 +41,7 @@ pub struct NewUser {
impl NewUser { impl NewUser {
pub fn new(username: String, password: String) -> NewUser { pub fn new(username: String, password: String) -> NewUser {
let crypt_password = bcrypt::hash(password, bcrypt::DEFAULT_COST).expect("could not hash password?");
let crypt_password = bcrypt::hash(password, ELSEWHERE_COST).expect("could not hash password?");
NewUser { NewUser {
username: username, username: username,
password: crypt_password, password: crypt_password,
@ -36,9 +49,36 @@ impl NewUser {
} }
} }
#[derive(Queryable, Identifiable, Associations, Debug)]
#[derive(Queryable, Identifiable, Associations)]
#[belongs_to(UserAccount, foreign_key="user_id")]
#[table_name="user_settings"]
pub struct UserSettings { pub struct UserSettings {
id: i32, id: i32,
user_id: i32, user_id: i32,
settings_blob: [u32; 0x1160],
//settings: Vec<u8>,
pub settings: EUserSettings,
}
#[derive(Insertable, Debug)]
#[table_name="user_settings"]
pub struct NewUserSettings {
pub user_id: i32,
pub settings: EUserSettings,
}
impl ToSql<sql_types::Binary, Pg> for EUserSettings {
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
out.write_all(&self.0.as_bytes()[..])
.map(|_| IsNull::No)
.map_err(|e| Box::new(e) as Box<dyn std::error::Error + Send + Sync>)
}
}
impl FromSql<sql_types::Binary, Pg> for EUserSettings {
fn from_sql(bytes: Option<&[u8]>) -> deserialize::Result<Self> {
let bytes_vec: Vec<u8> = <Vec<u8> as FromSql<sql_types::Binary, Pg>>::from_sql(bytes)?;
let mut static_bytes = [0u8; 0x1160];
static_bytes[..0x1160].clone_from_slice(&bytes_vec);
Ok(EUserSettings(settings::UserSettings::from_bytes(static_bytes)))
}
} }
Loading…
Cancel
Save