Visão geral
Neste guia, você aprenderá a trabalhar com os enums Result e Option no driver Rust.
O Rust fornece os enums Result e Option como proteção para o código do seu aplicativo. Muitos métodos oferecidos pelo driver Rust retornam valores envoltos em um desses dois tipos.
Enum de resultados
A enumeração Result pode retornar as seguintes variantes:
Ok(T): envolve o valor do resultado da operaçãoErr(E): envolve um valor de erro se a operação não for bem-sucedida
Por exemplo, o método insert_one() retorna um tipo Result para envolver uma resposta bem-sucedida ou um erro.
Para acessar o resultado não agrupado de insert_one(), use o operador ?. Se a operação for bem-sucedida, o método retornará a variante Ok(InsertOneResult) do enumeração Result. Nesse caso, o operador ? desembrulha o valor InsertOneResult e o atribui à variável insert_one_result. Se a operação não for bem-sucedida, o método retornará a variante de enumeração Err(E), e o operador ? desembrulhar e retornar o valor de erro.
O código a seguir demonstra a sintaxe para usar o operador ? ao lidar com um resultado de operação de inserção:
let insert_one_result = my_coll.insert_one(doc).await?;
Alternativamente, você pode criar um condicional para lidar com os valores não agrupados de InsertOneResult. O código a seguir usa a palavra-chave match para processar o resultado 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"); } }
Opção Enum
A enumeração Option pode retornar as seguintes variantes:
None: representa um valor vazio retornado por uma operaçãoSome(T): envolve um valor de retorno não vazio
Alguns métodos de driver Rust retornam um tipo de Option , como o método read_concern() . Este método retorna um Option que envolve um valor vazio, se não existir nenhuma referência de leitura, ou um valor ReadConcern .
Para acessar o resultado de read_concern(), você pode usar a mesma sintaxe match mostrada no exemplo anterior para processar as variantes None e Some(T) . Como alternativa, você pode usar a sintaxe if let para processar somente a variante Some(T) . O seguinte código desembrulha e imprime o valor de retorno read_concern() não vazio, se existir:
if let Some(rc) = my_coll.read_concern() { println!("Read concern: {:?}", rc); }
Recursos adicionais
Para obter mais informações sobre os enums Result e Option , consulte os seguintes recursos na documentação da linguagem Rust: