suyanhanx commented on code in PR #3593:
URL:
https://github.com/apache/incubator-opendal/pull/3593#discussion_r1395420074
##########
core/src/docs/upgrade.md:
##########
@@ -11,6 +11,19 @@ Users will need to change the following usage:
`delimiter` other than `""` and `"/"` is not supported anymore.
+## Raw API
+
+### Lister Align
+
+We changed our internal `lister` implementation to align with the `list`
public API for better performance and readability.
+
+- trait `Page` => `List`
+- struct `Pager` => `Lister`
+- trait `BlockingPage` => `BlockingList`
+- struct `BlockingPager` => `BlockingLister`
+
+Every call to `next` will return an entry instead a page of entries. Also, we
changed our async list api into poll based instead of `async_trait`.
Review Comment:
```rust
#[async_trait]
impl<R: oio::List> oio::List for ConcurrentLimitWrapper<R> {
fn poll_next(&mut self, cx: &mut Context<'_>) ->
Poll<Result<Option<oio::Entry>>> {
self.inner.poll_next(cx)
}
}
```
As you said, using the code I posted as an example, I think we can remove
`#[async_trait]` now.
I tried it locally, and it works.
Is this thought right?
##########
core/src/raw/oio/list/hierarchy_list.rs:
##########
@@ -0,0 +1,230 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+use std::collections::HashSet;
+use std::task::{ready, Context, Poll};
+
+use async_trait::async_trait;
+
+use crate::raw::*;
+use crate::*;
+
+/// ToHierarchyLister will convert a flat page to hierarchy by filter
+/// not needed entries.
+///
+/// # Notes
+///
+/// ToHierarchyLister filter entries after fetch entries. So it's possible
+/// to return an empty vec. It doesn't mean the all pages have been
+/// returned.
+///
+/// Please keep calling next_page until we returned `Ok(None)`
Review Comment:
Do we need to update this comments? Seems they are outdated.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]