@@ -221,6 +221,58 @@ impl<S: Adapter> Accessor for Backend<S> {
221
221
222
222
Ok ( ( RpList :: default ( ) , pager) )
223
223
}
224
+
225
+ async fn rename ( & self , from : & str , to : & str , _: OpRename ) -> Result < RpRename > {
226
+ match self . copy ( from, to, OpCopy { } ) . await {
227
+ Ok ( _) => {
228
+ let from = build_abs_path ( & self . root , from) ;
229
+ self . kv . delete ( & from) . await ?;
230
+ Ok ( RpRename :: default ( ) )
231
+ }
232
+ Err ( e) => Err ( e) ,
233
+ }
234
+ }
235
+
236
+ fn blocking_rename ( & self , from : & str , to : & str , _: OpRename ) -> Result < RpRename > {
237
+ match self . blocking_copy ( from, to, OpCopy { } ) {
238
+ Ok ( _) => {
239
+ let from = build_abs_path ( & self . root , from) ;
240
+ self . kv . blocking_delete ( & from) ?;
241
+ Ok ( RpRename :: default ( ) )
242
+ }
243
+ Err ( e) => Err ( e) ,
244
+ }
245
+ }
246
+
247
+ async fn copy ( & self , from : & str , to : & str , _: OpCopy ) -> Result < RpCopy > {
248
+ let from = build_abs_path ( & self . root , from) ;
249
+ let to = build_abs_path ( & self . root , to) ;
250
+
251
+ let bs = match self . kv . get ( & from) . await ? {
252
+ // TODO: we can reuse the metadata in value to build content range.
253
+ Some ( bs) => bs,
254
+ None => return Err ( Error :: new ( ErrorKind :: NotFound , "kv doesn't have this path" ) ) ,
255
+ } ;
256
+
257
+ self . kv . set ( & to, bs) . await ?;
258
+
259
+ Ok ( RpCopy :: default ( ) )
260
+ }
261
+
262
+ fn blocking_copy ( & self , from : & str , to : & str , _: OpCopy ) -> Result < RpCopy > {
263
+ let from = build_abs_path ( & self . root , from) ;
264
+ let to = build_abs_path ( & self . root , to) ;
265
+
266
+ let bs = match self . kv . blocking_get ( & from) ? {
267
+ // TODO: we can reuse the metadata in value to build content range.
268
+ Some ( bs) => bs,
269
+ None => return Err ( Error :: new ( ErrorKind :: NotFound , "kv doesn't have this path" ) ) ,
270
+ } ;
271
+
272
+ self . kv . blocking_set ( & to, bs) ?;
273
+
274
+ Ok ( RpCopy :: default ( ) )
275
+ }
224
276
}
225
277
226
278
impl < S > Backend < S >
0 commit comments