From 950b73e2de28fd3492772383d31cc9d01391df1a Mon Sep 17 00:00:00 2001 From: gwenn Date: Sun, 3 Mar 2024 19:04:16 +0100 Subject: [PATCH] Add example of OwningStatement using ouroboros --- examples/owning_statement.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 examples/owning_statement.rs diff --git a/examples/owning_statement.rs b/examples/owning_statement.rs new file mode 100644 index 0000000..544edaa --- /dev/null +++ b/examples/owning_statement.rs @@ -0,0 +1,27 @@ +extern crate rusqlite; +use ouroboros::self_referencing; +use rusqlite::{CachedStatement, Connection, Result, Rows}; + +#[self_referencing] +struct OwningStatement { + conn: Connection, + #[borrows(conn)] + #[covariant] + stmt: CachedStatement<'this>, +} + +fn main() -> Result<()> { + let conn = Connection::open_in_memory()?; + + let mut os = OwningStatementTryBuilder { + conn, + stmt_builder: |c| c.prepare_cached("SELECT 1"), + } + .try_build()?; + + let mut rows = os.with_stmt_mut(|stmt| -> Result> { stmt.query([]) })?; + while let Some(row) = rows.next()? { + assert_eq!(Ok(1), row.get(0)); + } + Ok(()) +}