usersetting sql serializer
This commit is contained in:
		
							parent
							
								
									377392b8bd
								
							
						
					
					
						commit
						7c3bcb75c9
					
				@ -1,9 +1,22 @@
 | 
			
		||||
use std::time::SystemTime;
 | 
			
		||||
use std::io::Write;
 | 
			
		||||
//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 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::*;
 | 
			
		||||
 | 
			
		||||
@ -28,7 +41,7 @@ pub struct NewUser {
 | 
			
		||||
 | 
			
		||||
impl 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 {
 | 
			
		||||
            username: username,
 | 
			
		||||
            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 {
 | 
			
		||||
    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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user