1+ use anyhow:: { anyhow, Result } ;
12use std:: path:: Path ;
23
34use rusqlite:: OptionalExtension as _;
@@ -17,78 +18,70 @@ impl SQLiteStore {
1718 . execute_batch ( include_str ! ( "schema.sql" ) )
1819 . expect ( "To Create DB" ) ;
1920
20- return Self { connection : conn } ;
21+ Self { connection : conn }
2122 }
2223}
2324
2425impl Store for SQLiteStore {
25- fn all ( & self ) -> Vec < ( String , super :: StoreValue ) > {
26- let mut stmt = self . connection . prepare ( "SELECT key,value from KV" ) . unwrap ( ) ;
26+ fn all ( & self ) -> Result < Vec < ( String , super :: StoreValue ) > > {
27+ let mut stmt = self . connection . prepare ( "SELECT key,value from KV" ) ? ;
2728
2829 let values = stmt
29- . query_map ( [ ] , |row| {
30- let key: String = row. get ( 0 ) ?;
31- let value = StoreValue :: Value ( row. get :: < _ , String > ( 1 ) ?) ;
30+ . query_map ( [ ] , |row| Ok ( ( row. get ( 0 ) ?, StoreValue :: Value ( row. get ( 1 ) ?) ) ) ) ?
31+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
3232
33- return Ok ( ( key, value) ) ;
34- } )
35- . unwrap ( )
36- . collect :: < Result < Vec < _ > , _ > > ( )
37- . unwrap ( ) ;
38-
39- return values;
33+ Ok ( values)
4034 }
4135
42- fn get ( & self , key : & str ) -> Option < super :: StoreValue > {
36+ fn get ( & self , key : & str ) -> Result < Option < super :: StoreValue > > {
4337 let stmt = self
4438 . connection
4539 . query_row (
4640 "SELECT key,value from KV where key = ?1 LIMIT 1" ,
4741 [ key] ,
48- |row| Ok ( StoreValue :: Value ( row. get ( 1 ) . unwrap ( ) ) ) ,
42+ |row| Ok ( StoreValue :: Value ( row. get ( 1 ) ? ) ) ,
4943 )
50- . optional ( )
51- . unwrap ( ) ;
44+ . optional ( ) ?;
5245
53- return stmt;
46+ Ok ( stmt)
5447 }
5548
56- fn set ( & mut self , key : & str , value : super :: StoreValue ) -> super :: StoreValue {
49+ fn set ( & mut self , key : & str , value : StoreValue ) -> Result < StoreValue > {
5750 let StoreValue :: Value ( value) = value else {
58- panic ! ( "Invalid value passed into SQLiteStore GET [{}]" , value)
51+ return Err ( anyhow ! (
52+ "Invalid value passed into SQLiteStore GET [{}]" ,
53+ value
54+ ) ) ;
5955 } ;
6056
61- self
62- . connection
63- . execute (
64- "INSERT INTO KV VALUES(NULL,?1,?2) ON CONFLICT(key) DO UPDATE SET value = ?2 WHERE key = ?1" ,
65- [ key, & value] ,
66- )
67- . unwrap ( ) ;
57+ self . connection . execute (
58+ "INSERT INTO KV VALUES(NULL,?1,?2) ON CONFLICT(key) DO UPDATE SET value = ?2 WHERE key = ?1" ,
59+ [ key, & value] ,
60+ ) ?;
6861
69- return StoreValue :: Value ( value) ;
62+ Ok ( StoreValue :: Value ( value) )
7063 }
7164
72- fn remove ( & mut self , key : & str ) -> Option < super :: StoreValue > {
73- let value = self . get ( key) ;
65+ fn remove ( & mut self , key : & str ) -> Result < Option < StoreValue > > {
66+ let value = self . get ( key) ? ;
7467
7568 let Some ( value) = value else {
76- return None ;
69+ return Ok ( None ) ;
7770 } ;
7871
7972 let stmt = self
8073 . connection
81- . execute ( "DELETE FROM KV where key = ?1" , [ key] )
82- . unwrap ( ) ;
74+ . execute ( "DELETE FROM KV where key = ?1" , [ key] ) ?;
8375
8476 if stmt == 0 {
8577 panic ! ( "Deleted 0 Rows when trying to delete Value from Store" )
8678 }
8779
88- Some ( value)
80+ Ok ( Some ( value) )
8981 }
9082
91- fn clear ( & mut self ) {
92- self . connection . execute ( "DELETE FROM KV" , [ ] ) . unwrap ( ) ;
83+ fn clear ( & mut self ) -> Result < usize > {
84+ let deleted = self . connection . execute ( "DELETE FROM KV" , [ ] ) ?;
85+ Ok ( deleted)
9386 }
9487}
0 commit comments