Menu
Coddy logo textTech

Composant bouton

Fait partie de la section Programmation Orientée Objet du Journey Rust de Coddy. Leçon 51 sur 61.

challenge icon

Défi

Facile

Continuons à construire notre système de documents en ajoutant un deuxième composant d’interface utilisateur : un Button. Tout comme le TextField, ce composant implémentera le trait Draw, illustrant comment différents types peuvent partager une interface commune.

Vous allez étendre votre projet avec un autre fichier de module :

  • draw.rs : conservez votre trait Draw des défis précédents.
  • text_field.rs : conservez votre structure TextField et son implémentation de Draw.
  • button.rs : créez une structure Button avec deux champs publics : label (un String) et width (un u32). Implémentez le trait Draw pour Button afin que l’appel à draw() affiche le bouton dans ce format : Button: {label} (width: {width})
  • main.rs : importez les trois modules. Créez à la fois un TextField et un Button, puis appelez draw() sur chacun pour afficher les deux composants.

Votre module button devra accéder au trait Draw en utilisant crate::draw::Draw, comme vous l’avez fait avec TextField.

Les entrées suivantes seront fournies :

  • Première ligne : le contenu du champ de texte
  • Deuxième ligne : le libellé du bouton
  • Troisième ligne : la largeur du bouton (sous forme de nombre)

Votre sortie doit afficher le champ de texte en premier, puis le bouton, chacun sur sa propre ligne :

Text: Welcome
Button: Submit (width: 100)

Essayez vous-même

mod draw;
mod text_field;
mod button;

use draw::Draw;
use text_field::TextField;
use button::Button;

pub struct Label {
    pub text: String,
}

impl Draw for Label {
    fn draw(&self) {
        println!("{}", self.text);
    }
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let content = input1.trim().to_string();

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let label = input2.trim().to_string();

    let mut input3 = String::new();
    std::io::stdin().read_line(&mut input3).expect("Failed to read line");
    let width: u32 = input3.trim().parse().expect("Failed to parse width");

    let text_field = TextField { content };
    text_field.draw();

    // TODO: Créer un Button avec `label` et `width`, puis appeler draw()
    
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Rust en ligne