@@ -2,7 +2,8 @@ use crate::{
22 transaction:: transaction_request,
33 utils:: {
44 map_cursor_advance_err, map_cursor_advance_until_err,
5- map_cursor_advance_until_primary_key_err, map_cursor_delete_err, slice_to_array,
5+ map_cursor_advance_until_primary_key_err, map_cursor_delete_err, map_cursor_update_err,
6+ slice_to_array,
67 } ,
78} ;
89use std:: marker:: PhantomData ;
@@ -151,12 +152,26 @@ impl<Err> Cursor<Err> {
151152 /// Note that this method does not work on key-only cursors over indexes.
152153 ///
153154 /// Internally, this uses [`IDBCursor::delete`](https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/delete).
154- pub async fn delete ( & mut self ) -> crate :: Result < ( ) , Err > {
155+ pub async fn delete ( & self ) -> crate :: Result < ( ) , Err > {
155156 let Some ( sys) = & self . sys else {
156157 return Err ( crate :: Error :: CursorCompleted ) ;
157158 } ;
158159 let req = sys. delete ( ) . map_err ( map_cursor_delete_err) ?;
159160 transaction_request ( req) . await ?;
160161 Ok ( ( ) )
161162 }
163+
164+ /// Update the value currently pointed by this [`Cursor`] to `value`
165+ ///
166+ /// Note that this method does not work on key-only cursors over indexes.
167+ ///
168+ /// Internally, this uses [`IDBCursor::update`](https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/update).
169+ pub async fn update ( & self , value : & JsValue ) -> crate :: Result < ( ) , Err > {
170+ let Some ( sys) = & self . sys else {
171+ return Err ( crate :: Error :: CursorCompleted ) ;
172+ } ;
173+ let req = sys. update ( value) . map_err ( map_cursor_update_err) ?;
174+ transaction_request ( req) . await ?;
175+ Ok ( ( ) )
176+ }
162177}
0 commit comments