Overview
En esta guía, puedes aprender cómo trabajar con el Result y Option enumeraciones en el driver 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.
Enum de resultado
El enumerado 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 desempaquetado de insert_one(), utiliza el operador ?. Si la operación es exitosa, el método devolverá la variante Ok(InsertOneResult) del enum Result. En este caso, el operador ? desembala el valor InsertOneResult y lo asigna a la variable insert_one_result. Si la operación no tiene éxito, el método devuelve la variante de enumeración Err(E) y el operador ? desempaqueta y devuelve el valor del error.
El siguiente código muestra 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"); } }
Opción Enum
El enumerado Option puede devolver las siguientes variantes:
Nonedelimita 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(), puedes utilizar la misma sintaxis de match que se muestra en el ejemplo anterior para procesar las variantes None y Some(T). Como alternativa, puedes usar la sintaxis if let para procesar solo la variante Some(T). El siguiente código desempaqueta e imprime el valor no vacío de retorno de read_concern(), si es que 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: