in core/src/layers/complete.rs [313:361]
fn complete_blocking_list(
&self,
path: &str,
args: OpList,
) -> Result<(RpList, CompletePager<A, A::BlockingPager>)> {
let cap = self.meta.capability();
if !cap.list {
return Err(
Error::new(ErrorKind::Unsupported, "operation is not supported")
.with_context("service", self.meta.scheme())
.with_operation("list"),
);
}
let delimiter = args.delimiter();
if delimiter.is_empty() {
return if cap.list_without_delimiter {
let (rp, p) = self.inner.blocking_list(path, args)?;
Ok((rp, CompletePager::AlreadyComplete(p)))
} else {
let p = into_flat_page(
self.inner.clone(),
path,
args.with_delimiter("/").limit().unwrap_or(1000),
);
Ok((RpList::default(), CompletePager::NeedFlat(p)))
};
}
if delimiter == "/" {
return if cap.list_with_delimiter_slash {
let (rp, p) = self.inner.blocking_list(path, args)?;
Ok((rp, CompletePager::AlreadyComplete(p)))
} else {
let (_, p) = self.inner.blocking_list(path, args.with_delimiter(""))?;
let p: HierarchyPager<<A as Accessor>::BlockingPager> =
into_hierarchy_page(p, path);
Ok((RpList::default(), CompletePager::NeedHierarchy(p)))
};
}
Err(Error::new(
ErrorKind::Unsupported,
"list with other delimiter is not supported",
)
.with_context("service", self.meta.scheme())
.with_context("delimiter", delimiter))
}