async def METHOD_NAME(
    self, prefix: str, recursive: bool = False, limit: Optional[int] = None
) -> AsyncIterator[BucketEntry]:
    common_prefixes = set()
    for key in self.keys:
        if key.startswith(prefix):
            post_prefix = key[len(prefix) :]
            if recursive or ("/" not in post_prefix):
                yield await self.head_blob(key)
            elif not recursive:
                common, _ = post_prefix.split("/", 1)
                common_prefixes.add(prefix + common)
    for common in common_prefixes:
        yield BlobCommonPrefix(
            key=common,
            bucket=self.bucket,
            size=0,
        )