aboutsummaryrefslogtreecommitdiff
path: root/src/db/categories.rs
blob: f81b855b20bf8acdc3be8c5b0961bad0a04eca3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use anyhow::Result;
use rusqlite::Connection;
use uuid::Uuid;

use crate::model::category::Category;

pub fn list(conn: &Connection) -> Result<Vec<Category>> {
    let query = r#"SELECT id, name, color FROM categories"#;
    let mut stmt = conn.prepare(query)?;

    let iter = stmt.query_map([], |row| {
        Ok(read_category(row.get(0)?, row.get(1)?, row.get(2)?))
    })?;

    let mut res = vec![];
    for category in iter {
        res.push(category??)
    }
    Ok(res)
}

fn read_category(id: String, name: String, color: String) -> Result<Category> {
    let id = Uuid::parse_str(&id)?;
    Ok(Category { id, name, color })
}