@@ -20,17 +20,19 @@ use std::sync::Arc;
2020
2121use  tokio:: task; 
2222
23+ use  crate :: raw:: oio:: HierarchyLister ; 
24+ use  crate :: raw:: * ; 
25+ use  crate :: services:: RedbConfig ; 
2326use  crate :: Builder ; 
2427use  crate :: Error ; 
2528use  crate :: ErrorKind ; 
2629use  crate :: Scheme ; 
27- use  crate :: raw:: oio:: HierarchyLister ; 
28- use  crate :: raw:: * ; 
29- use  crate :: services:: RedbConfig ; 
3030use  crate :: * ; 
3131
3232use  super :: core:: RedbCore ; 
33+ use  super :: deleter:: RedbDeleter ; 
3334use  super :: error:: * ; 
35+ use  super :: lister:: RedbFilter ; 
3436use  super :: lister:: RedbLister ; 
3537use  super :: writer:: RedbWriter ; 
3638
@@ -149,13 +151,15 @@ pub struct RedbBackend {
149151impl  Access  for  RedbBackend  { 
150152    type  Reader  = Buffer ; 
151153    type  Writer  = RedbWriter ; 
152-     type  Lister  = ( ) ; 
154+     type  Lister  = HierarchyLister < RedbLister > ; 
155+     type  Deleter  = oio:: OneShotDeleter < RedbDeleter > ; 
153156    type  BlockingReader  = Buffer ; 
154157    type  BlockingWriter  = RedbWriter ; 
155-     type  BlockingLister  = HierarchyLister < RedbLister > ; 
158+     type  BlockingLister  = HierarchyLister < RedbFilter > ; 
159+     type  BlockingDeleter  = oio:: OneShotDeleter < RedbDeleter > ; 
156160
157161    fn  info ( & self )  -> Arc < AccessorInfo >  { 
158-         let  mut   am = AccessorInfo :: default ( ) ; 
162+         let  am = AccessorInfo :: default ( ) ; 
159163        am. set_scheme ( Scheme :: Redb ) 
160164            . set_root ( & self . core . root ) 
161165            . set_name ( & self . core . datadir ) 
@@ -233,27 +237,30 @@ impl Access for RedbBackend {
233237        Ok ( ( RpWrite :: new ( ) ,  RedbWriter :: new ( self . core . clone ( ) ,  p) ) ) 
234238    } 
235239
236-     async  fn  delete ( & self ,   path :   & str ,   args :   OpDelete )  -> Result < RpDelete >  { 
237-         let  cloned_self =  self . clone ( ) ; 
238-          let  cloned_path = path . to_string ( ) ; 
240+     async  fn  delete ( & self )  -> Result < ( RpDelete ,   Self :: Deleter ) >  { 
241+         self . blocking_delete ( ) 
242+     } 
239243
240-         task:: spawn_blocking ( move  || cloned_self. blocking_delete ( cloned_path. as_str ( ) ,  args) ) 
241-             . await 
242-             . map_err ( new_task_join_error) 
243-             . and_then ( |inner_result| inner_result) 
244+     fn  blocking_delete ( & self )  -> Result < ( RpDelete ,  Self :: BlockingDeleter ) >  { 
245+         Ok ( ( 
246+             RpDelete :: default ( ) , 
247+             oio:: OneShotDeleter :: new ( RedbDeleter :: new ( self . core . clone ( ) ) ) , 
248+         ) ) 
244249    } 
245250
246-     fn  blocking_delete ( & self ,  path :  & str ,  _:  OpDelete )  -> Result < RpDelete >  { 
247-         let  p = build_abs_path ( & self . core . root ,  path) ; 
251+     async  fn  list ( & self ,  path :  & str ,  args :  OpList )  -> Result < ( RpList ,  Self :: Lister ) >  { 
252+         let  pattern = build_abs_path ( & self . core . root ,  path) ; 
253+         let  range = self . core . iter ( ) ?; 
254+         let  lister = RedbLister :: new ( RedbFilter :: new ( range,  pattern) ) ; 
255+         let  lister = HierarchyLister :: new ( lister,  path,  args. recursive ( ) ) ; 
248256
249-         self . core . delete ( & p) ?; 
250-         Ok ( RpDelete :: default ( ) ) 
257+         Ok ( ( RpList :: default ( ) ,  lister) ) 
251258    } 
252259
253260    fn  blocking_list ( & self ,  path :  & str ,  args :  OpList )  -> Result < ( RpList ,  Self :: BlockingLister ) >  { 
254261        let  pattern = build_abs_path ( & self . core . root ,  path) ; 
255262        let  range = self . core . iter ( ) ?; 
256-         let  lister = RedbLister :: new ( range,  pattern) ; 
263+         let  lister = RedbFilter :: new ( range,  pattern) ; 
257264        let  lister = HierarchyLister :: new ( lister,  path,  args. recursive ( ) ) ; 
258265
259266        Ok ( ( RpList :: default ( ) ,  lister) ) 
0 commit comments