pub trait Database {
// Required methods
fn add_note<'life0, 'async_trait>(
&'life0 self,
note: CreateNote,
) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
) -> Pin<Box<dyn Future<Output = Result<Option<Note>, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_notes<'life0, 'async_trait>(
&'life0 self,
query: NoteQuery,
) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn count_notes<'life0, 'async_trait>(
&'life0 self,
query: NoteQuery,
) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
update: UpdateNote,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn delete_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_tags<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<TagCount>, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn grep<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
tags: Option<&'life2 [String]>,
case_sensitive: bool,
) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
}Expand description
Database abstraction that works for both SQLite and D1.
Uses async_trait with ?Send bound for WASM compatibility.
The ?Send is critical - WASM is single-threaded and JS values aren’t Send.
Required Methods§
Sourcefn add_note<'life0, 'async_trait>(
&'life0 self,
note: CreateNote,
) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn add_note<'life0, 'async_trait>(
&'life0 self,
note: CreateNote,
) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Add a new note and return its ID.
Sourcefn get_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
) -> Pin<Box<dyn Future<Output = Result<Option<Note>, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
) -> Pin<Box<dyn Future<Output = Result<Option<Note>, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get a note by ID.
Sourcefn list_notes<'life0, 'async_trait>(
&'life0 self,
query: NoteQuery,
) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_notes<'life0, 'async_trait>(
&'life0 self,
query: NoteQuery,
) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List notes matching the query.
Sourcefn count_notes<'life0, 'async_trait>(
&'life0 self,
query: NoteQuery,
) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count_notes<'life0, 'async_trait>(
&'life0 self,
query: NoteQuery,
) -> Pin<Box<dyn Future<Output = Result<i64, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Count notes matching the query (ignores limit).
Sourcefn update_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
update: UpdateNote,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
update: UpdateNote,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Update an existing note.
Sourcefn delete_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn delete_note<'life0, 'async_trait>(
&'life0 self,
id: i64,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Delete a note by ID. Returns true if deleted, false if not found.
List all tags with their note counts.
Sourcefn grep<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
tags: Option<&'life2 [String]>,
case_sensitive: bool,
) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn grep<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
tags: Option<&'life2 [String]>,
case_sensitive: bool,
) -> Pin<Box<dyn Future<Output = Result<Vec<Note>, Error>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Search notes by pattern (regex) in title and body.