Menu
Coddy logo textTech

Componente de Botão

Parte da seção Object Oriented Programming do Journey de Rust da Coddy. Lição 51 de 61.

challenge icon

Desafio

Fácil

Vamos continuar construindo nosso Sistema de Documentos adicionando um segundo componente de UI: um Button. Assim como o TextField, este componente implementará a trait Draw, demonstrando como diferentes tipos podem compartilhar uma interface comum.

Você expandirá seu projeto com outro arquivo de módulo:

  • draw.rs: Mantenha sua trait Draw dos desafios anteriores.
  • text_field.rs: Mantenha sua struct TextField e sua implementação de Draw.
  • button.rs: Crie uma struct Button com dois campos públicos: label (uma String) e width (um u32). Implemente a trait Draw para Button de modo que a chamada de draw() imprima o botão neste formato: Button: {label} (width: {width})
  • main.rs: Importe todos os três módulos. Crie tanto um TextField quanto um Button, então chame draw() em cada um para renderizar ambos os componentes.

Seu módulo button precisará acessar a trait Draw usando crate::draw::Draw, assim como você fez com TextField.

As seguintes entradas serão fornecidas:

  • Primeira linha: o conteúdo do campo de texto
  • Segunda linha: o rótulo do botão
  • Terceira linha: a largura do botão (como um número)

Sua saída deve exibir o campo de texto primeiro, depois o botão, cada um em sua própria linha:

Text: Welcome
Button: Submit (width: 100)

Experimente você mesmo

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: Crie um Button com `label` e `width`, depois chame draw()
    
}

Todas as lições de Object Oriented Programming

Pratique por conta própria: Compilador de Rust online