Overview
En esta guía, puedes aprender cómo trabajar con el Result y enumeraciones Option en el controlador de Rust.
Rust proporciona los enumerados Result y Option como salvaguardias para el código de tu aplicación. Muchos métodos ofrecidos por el controlador Rust devuelven valores encapsulados en uno de estos dos tipos.
Enumeración de resultados
La enumeración Result puede devolver las siguientes variantes:
Ok(T): envuelve el valor del resultado de la operaciónErr(E): envuelve un valor de error si la operación no tiene éxito
Por ejemplo, el método insert_one() devuelve un tipo Result para envolver una respuesta exitosa o un error.
Para acceder al resultado sin envolver de insert_one(), utilice el operador ?. Si la operación es exitosa, el método devuelve la variante Ok(InsertOneResult) de la enumeración Result. En este caso, el operador ? desempaqueta el valor InsertOneResult y lo asigna a la variable insert_one_result. Si la operación falla, el método devuelve la variante de la enumeración Err(E), y el operador ? desempaqueta y devuelve el valor de error.
El siguiente código demuestra la sintaxis para usar el operador ? al manejar el resultado de una operación de inserción:
let insert_one_result = my_coll.insert_one(doc).await?;
Alternativamente, puede crear una condicional para gestionar los valores desenvueltos de InsertOneResult. El siguiente código utiliza la palabra clave match para procesar el 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"); } }
Enumeración de opciones
La enumeración Option puede devolver las siguientes variantes:
None: representa un valor vacío devuelto por una operaciónSome(T): envuelve un valor de retorno no vacío
Algunos métodos de los drivers de Rust devuelven un tipo Option, como el método read_concern(). Este método retorna un Option que contiene un valor vacío, si no existe un nivel de consistencia de lectura, o un valor ReadConcern.
Para acceder al resultado de read_concern(), puede usar la misma sintaxis match que se muestra en el ejemplo anterior para procesar las variantes None y Some(T). Alternativamente, puede usar la sintaxis if let para procesar solo la variante Some(T). El siguiente código desempaqueta e imprime el valor de retorno read_concern() no vacío, si existe:
if let Some(rc) = my_coll.read_concern() { println!("Read concern: {:?}", rc); }
Recursos adicionales
Para obtener más información sobre los enums Result y Option, consulta los siguientes recursos en la documentación del lenguaje Rust: