fn complete_blocking_list()

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))
    }