Going somewhere.
This commit is contained in:
1 parent
20cc644bfb
commit
7a212d6d28
5 files changed
+213
-91
No files matched your search
+26
-13
@@ -1,28 +1,41 @@
|
||||
use rusqlite::{Connection, Result};
|
||||
use rusqlite::{Connection, params, Result, Transaction, Row};
|
||||
use serde::{Serialize};
|
||||
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct User {
|
||||
id: i32,
|
||||
pub id: i32,
|
||||
name: String,
|
||||
public_key: String,
|
||||
}
|
||||
|
||||
pub fn create_user(conn: & Connection, name: &String, public_key: &String){
|
||||
conn.execute("INSERT INTO users (name, public_key) VALUES (?1, ?2)",
|
||||
(name, public_key)).unwrap();
|
||||
pub fn create_user(tx: & Transaction, name: &String, public_key: &String) -> Result<User>{
|
||||
tx.execute("INSERT INTO users (name, public_key) VALUES (?1, ?2)",
|
||||
(name, public_key))?;
|
||||
return get_user_by_id(tx, tx.last_insert_rowid() as i32);
|
||||
}
|
||||
|
||||
pub fn list_users(conn: & Connection) -> Result<Vec<Result<User>>>{
|
||||
fn _user_from_row(row: &Row) -> Result<User>{
|
||||
Ok(User {
|
||||
id: row.get(0)?,
|
||||
name: row.get(1)?,
|
||||
public_key: row.get(2)?,
|
||||
})
|
||||
}
|
||||
|
||||
fn get_user_by_id(tx: & Transaction, id: i32) -> Result<User>{
|
||||
let q = "SELECT id, name, public_key
|
||||
FROM users
|
||||
WHERE id = ?1";
|
||||
tx.query_row(q, params![id], _user_from_row)
|
||||
}
|
||||
|
||||
pub fn list_users(conn: & Connection) -> Result<Vec<User>>{
|
||||
|
||||
let mut stmt = conn.prepare("SELECT id, name, public_key FROM users")?;
|
||||
let ret: Vec<Result<User>> = stmt.query_map([], |row| {
|
||||
Ok(User {
|
||||
id: row.get(0)?,
|
||||
name: row.get(1)?,
|
||||
public_key: row.get(2)?,
|
||||
})
|
||||
}).unwrap().collect();
|
||||
let ret: Vec<User> = stmt.query_map([], _user_from_row)?
|
||||
.filter(Result::is_ok)
|
||||
.map(Result::unwrap)
|
||||
.collect();
|
||||
return Ok(ret);
|
||||
}
|
||||
Reference in new issue
Block a user