Overview
このガイドでは、 Rustドライバーで Result 列と Option 列挙型を操作する方法を学習できます。
Rust は、アプリケーション コードの予防手段としてResult列とOption列を提供します。 Rust ドライバーが提供する多くのメソッドは、これら 2 つのタイプのいずれかにラップされた値を返します。
結果列挙
Result列挙型は、次のバリアントを返すことができます。
Ok(T): は操作の結果の値をラップします。Err(E): 操作が失敗した場合にエラー値をラップします
たとえば、 insert_one()メソッドは、成功した応答またはエラーのいずれかをラップするためのResult型を返します。
insert_one() のラップされていない結果にアクセスするには、? 演算子を使用します。操作が成功した場合、メソッドは Result列挙の Ok(InsertOneResult) バリアントを返します。この場合、? 演算子は InsertOneResult 値のラップを解除し、それを insert_one_result 変数に割り当てます。操作が成功した場合、メソッドは Err(E)列挙バリアントを返し、? 演算子はラップを解除してエラー値を返します。
次のコードは、挿入操作の結果を処理するときに ? 演算子を使用するための構文を示しています。
let insert_one_result = my_coll.insert_one(doc).await?;
あるいは、条件を作成して、 InsertOneResultのラップされていない値を処理することもできます。 次のコードでは、 matchキーワードを使用してinsert_one()の結果を処理します。
let insert_one_result = my_coll.insert_one(doc).await; match insert_one_result { Ok(val) => { println!("Document inserted with ID: {}", val.inserted_id); }, Err(err) => { println!("Operation not successful"); } }
オプション列挙
Option列挙型は、次のバリアントを返すことができます。
None: 操作によって返された空の値を表しますSome(T): 空でない戻り値をラップします
一部の Rust ドライバー メソッドは、 read_concern()メソッドなどのOptionタイプを返します。 このメソッドは、読み取り保証が存在しない場合は空の値またはReadConcern値のいずれかをラップするOptionを返します。
read_concern()matchの結果にアクセスするには、前述の例に示すように同じ 構文を使用して、None Some(T)バリアントと バリアントを処理します。あるいは、 if let構文を使用してSome(T)バリアントのみを処理することもできます。 次のコードでは、空でないread_concern()戻り値(存在する場合)のラップを解除して出力します。
if let Some(rc) = my_coll.read_concern() { println!("Read concern: {:?}", rc); }
追加リソース
Result列挙型とOption 列挙型の詳細については、Rust 言語ドキュメントの次のリソースを参照してください。