Erreurs en Rust

Rappel en C

#include <stdio.h>

int main() {
    FILE *f = fopen("fichier.txt","rt");

    if(f == NULL) {
        /** gestion de l'erreur mais
        si tu veux faire n'importe
        quoi et utiliser f en essayant
        de lire le fichier car tu es bornée tu peux **/
    }
    ...
}

Python

    x = 0

En Rust

En Rust, File::open("fichier.txt") renvoie une valeur de type Result qui est un enum comme ça :

#![allow(unused)]
fn main() {
pub enum Result<T, E> {
    Ok(T),
    Err(E),
}
}

T est le type de l'objet attendu (ici un fichier) et E est le type de l'erreur.

Ainsi on fait du pattern matching :

#![allow(unused)]
fn main() {
use std::fs::File;

match File::open("fichier.txt") {
    Ok(f) => {
        /* l'ouverture s'est bien déroulée 
        on fait mumuse avec le fichier*/
    }
    Err(e) => {
        /* il y a eu une erreur et on
         ne peut pas faire trop de 
         bêtise avec le fichier car on 
         ne l'a même pas sous la main ! */
    }
}
}