@@ -495,7 +495,7 @@ impl Connection {
495495 Ok ( buf)
496496 }
497497
498- pub ( crate ) fn wal_insert_begin ( & self ) -> Result < ( ) > {
498+ fn wal_insert_begin ( & self ) -> Result < ( ) > {
499499 let rc = unsafe { libsql_sys:: ffi:: libsql_wal_insert_begin ( self . handle ( ) ) } ;
500500 if rc != 0 {
501501 return Err ( crate :: errors:: Error :: SqliteFailure (
@@ -506,7 +506,7 @@ impl Connection {
506506 Ok ( ( ) )
507507 }
508508
509- pub ( crate ) fn wal_insert_end ( & self ) -> Result < ( ) > {
509+ fn wal_insert_end ( & self ) -> Result < ( ) > {
510510 let rc = unsafe { libsql_sys:: ffi:: libsql_wal_insert_end ( self . handle ( ) ) } ;
511511 if rc != 0 {
512512 return Err ( crate :: errors:: Error :: SqliteFailure (
@@ -517,7 +517,7 @@ impl Connection {
517517 Ok ( ( ) )
518518 }
519519
520- pub ( crate ) fn wal_insert_frame ( & self , frame : & [ u8 ] ) -> Result < ( ) > {
520+ fn wal_insert_frame ( & self , frame : & [ u8 ] ) -> Result < ( ) > {
521521 let rc = unsafe {
522522 libsql_sys:: ffi:: libsql_wal_insert_frame (
523523 self . handle ( ) ,
@@ -534,6 +534,30 @@ impl Connection {
534534 }
535535 Ok ( ( ) )
536536 }
537+
538+ pub ( crate ) fn wal_insert_handle ( & self ) -> Result < WalInsertHandle < ' _ > > {
539+ self . wal_insert_begin ( ) ?;
540+ Ok ( WalInsertHandle { conn : self } )
541+ }
542+ }
543+
544+ pub ( crate ) struct WalInsertHandle < ' a > {
545+ conn : & ' a Connection ,
546+ }
547+
548+ impl WalInsertHandle < ' _ > {
549+ pub fn insert ( & self , frame : & [ u8 ] ) -> Result < ( ) > {
550+ self . conn . wal_insert_frame ( frame)
551+ }
552+ }
553+
554+ impl Drop for WalInsertHandle < ' _ > {
555+ fn drop ( & mut self ) {
556+ if let Err ( err) = self . conn . wal_insert_end ( ) {
557+ tracing:: error!( "{:?}" , err) ;
558+ Err ( err) . unwrap ( )
559+ }
560+ }
537561}
538562
539563impl fmt:: Debug for Connection {
0 commit comments