Files
escarmouche/src/users.rs
T
2022-12-13 09:29:27 -05:00

41 lines
1.1 KiB
Rust

use rusqlite::{Connection, params, Result, Transaction, Row};
use serde::{Serialize};
#[derive(Debug, Serialize)]
pub struct User {
pub id: i32,
name: String,
public_key: String,
}
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);
}
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<User> = stmt.query_map([], _user_from_row)?
.filter(Result::is_ok)
.map(Result::unwrap)
.collect();
return Ok(ret);
}