persistence.rs

 1use std::path::PathBuf;
 2
 3use db::sqlez_macros::sql;
 4use db::{define_connection, query};
 5use workspace::{ItemId, WorkspaceDb, WorkspaceId};
 6
 7define_connection!(
 8    pub static ref DB: EditorDb<WorkspaceDb> =
 9        &[sql! (
10            CREATE TABLE editors(
11                item_id INTEGER NOT NULL,
12                workspace_id INTEGER NOT NULL,
13                path BLOB NOT NULL,
14                PRIMARY KEY(item_id, workspace_id),
15                FOREIGN KEY(workspace_id) REFERENCES workspaces(workspace_id)
16                ON DELETE CASCADE
17                ON UPDATE CASCADE
18        ) STRICT;
19    )];
20);
21
22impl EditorDb {
23    query! {
24        pub fn get_path(item_id: ItemId, workspace_id: WorkspaceId) -> Result<Option<PathBuf>> {
25            SELECT path FROM editors
26            WHERE item_id = ? AND workspace_id = ?
27        }
28    }
29
30    query! {
31        pub async fn save_path(item_id: ItemId, workspace_id: WorkspaceId, path: PathBuf) -> Result<()> {
32            INSERT OR REPLACE INTO editors(item_id, workspace_id, path)
33            VALUES (?, ?, ?)
34        }
35    }
36}