Menu
Coddy logo textTech

Composant bouton

Fait partie de la section Object Oriented Programming 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, démontrant 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 de sorte 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 effectuer le rendu des deux composants.

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

Les entrées suivantes seront fournies :

  • Première ligne : le contenu du champ de texte (text field)
  • Deuxième ligne : le libellé (label) du bouton
  • Troisième ligne : la largeur (width) 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 Object Oriented Programming