

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在適用於 Rust 的 AWS SDK 中使用分頁結果
<a name="paginating"></a>

當承載太大而無法在單一回應中傳回時，許多 AWS 操作會傳回截斷的結果。反之，服務會傳回一部分的資料和字符，以擷取下一組項目。此模式稱為分頁。

 適用於 Rust 的 AWS SDK 包含操作建置器`into_paginator`上的延伸方法，可用於自動為您分頁結果。您只需撰寫處理結果的程式碼。所有分頁操作建置器都有可用的`into_paginator()`方法，可公開 [https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html](https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html)以分頁結果。
+ 在 Amazon S3 中，其中一個範例是 [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/operation/list_objects_v2/builders/struct.ListObjectsV2FluentBuilder.html#method.into_paginator](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/operation/list_objects_v2/builders/struct.ListObjectsV2FluentBuilder.html#method.into_paginator)。

下列範例使用 Amazon Simple Storage Service。不過，對於具有一或多個分頁 APIs 的任何服務，這些概念都相同。

 下列程式碼範例顯示最簡單的範例，使用 [https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html#method.try_collect](https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html#method.try_collect)方法將所有分頁結果收集到 `Vec`：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

let s3 = aws_sdk_s3::Client::new(&config);

let all_objects = s3.list_objects_v2()
    .bucket("my-bucket")
    .into_paginator()
    .send()
    .try_collect()
    .await?
    .into_iter()
    .flat_map(|o| o.contents.unwrap_or_default())
    .collect::<Vec<_>>();
```

有時，您想要對分頁有更多控制權，而不是一次將所有內容全部提取到記憶體中。下列範例會逐一查看 Amazon S3 儲存貯體中的物件，直到不再存在為止。

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

let s3 = aws_sdk_s3::Client::new(&config);

let mut paginator = s3.list_objects_v2()
    .bucket("my-bucket")
    .into_paginator()
    // customize the page size (max results per/response)
    .page_size(10)
    .send();

println!("Objects in bucket:");

while let Some(result) = paginator.next().await {
    let resp = result?;
    for obj in resp.contents() {
        println!("\t{:?}", obj);
    }
}
```