28 lines
686 B
Rust
28 lines
686 B
Rust
use sqlite::{Connection, Error, State, Statement};
|
|
|
|
pub fn fetch_one<T, F: FnOnce(&Statement) -> Result<T, Error>>(
|
|
conn: &Connection,
|
|
query: &str,
|
|
adaptor: F,
|
|
) -> Result<Option<T>, Error> {
|
|
let mut stmt = conn.prepare(query)?;
|
|
if let State::Row = stmt.next()? {
|
|
adaptor(&stmt).map(Some)
|
|
} else {
|
|
Ok(None)
|
|
}
|
|
}
|
|
|
|
pub fn fetch_many<T, F: FnMut(&Statement) -> Result<T, Error>>(
|
|
conn: &Connection,
|
|
query: &str,
|
|
mut adaptor: F,
|
|
) -> Result<Vec<T>, Error> {
|
|
let mut result = Vec::new();
|
|
let mut stmt = conn.prepare(query)?;
|
|
while let State::Row = stmt.next()? {
|
|
result.push(adaptor(&stmt)?);
|
|
}
|
|
Ok(result)
|
|
}
|