11use anyhow:: Result ;
2- use redb:: { Database , ReadableTable , TableDefinition } ;
2+ use redb:: { Database , ReadableTable , TableDefinition , TableError } ;
33use std:: path:: Path ;
44
55use crate :: store:: MessageStore ;
@@ -28,11 +28,14 @@ impl RedbMessageStore {
2828 sender_seq_number = table. get ( SENDER_KEY ) ?. map_or ( 0 , |g| g. value ( ) ) ;
2929 target_seq_number = table. get ( TARGET_KEY ) ?. map_or ( 0 , |g| g. value ( ) ) ;
3030 }
31- Err ( _ ) => {
31+ Err ( TableError :: TableDoesNotExist ( _ ) ) => {
3232 // Tables don't exist yet, initialise to 0
3333 sender_seq_number = 0 ;
3434 target_seq_number = 0 ;
3535 }
36+ Err ( err) => {
37+ return Err ( err. into ( ) ) ;
38+ }
3639 } ;
3740 }
3841
@@ -59,12 +62,18 @@ impl MessageStore for RedbMessageStore {
5962 async fn get_slice ( & self , begin : usize , end : usize ) -> Result < Vec < Vec < u8 > > > {
6063 let read_txn = self . db . begin_read ( ) ?;
6164 {
62- let table = read_txn. open_table ( MESSAGES_TABLE ) ?;
63- let messages: std:: result:: Result < Vec < Vec < u8 > > , redb:: StorageError > = table
64- . range ( begin as u64 ..=end as u64 ) ?
65- . map ( |m| m. map ( |v| v. 1 . value ( ) . to_vec ( ) ) )
66- . collect ( ) ;
67- Ok ( messages?)
65+ let res = match read_txn. open_table ( MESSAGES_TABLE ) {
66+ Ok ( table) => {
67+ let messages: std:: result:: Result < Vec < Vec < u8 > > , redb:: StorageError > = table
68+ . range ( begin as u64 ..=end as u64 ) ?
69+ . map ( |m| m. map ( |v| v. 1 . value ( ) . to_vec ( ) ) )
70+ . collect ( ) ;
71+ Ok ( messages?)
72+ }
73+ Err ( TableError :: TableDoesNotExist ( _) ) => Ok ( vec ! [ ] ) ,
74+ Err ( err) => Err ( err. into ( ) ) ,
75+ } ;
76+ res
6877 }
6978 }
7079
0 commit comments