Menu
Coddy logo textTech

Componente de Botão

Parte da seção Programação Orientada a Objetos 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, esse componente implementará o trait Draw, demonstrando como tipos diferentes podem compartilhar uma interface comum.

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

  • draw.rs: mantenha seu 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 o trait Draw para Button para que chamar draw() imprima o botão neste formato: Button: {label} (width: {width})
  • main.rs: inclua os três módulos. Crie um TextField e um Button, depois chame draw() em cada um para renderizar os dois componentes.

Seu módulo button precisará acessar o 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 primeiro o campo de texto e depois o botão, cada um em sua própria linha:

Text: Welcome
Button: Submit (width: 100)
FORMATO DE SAÍDA OBRIGATÓRIO: [Seu conteúdo traduzido aqui]

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 Programação Orientada a Objetos

Pratique por conta própria: Compilador de Rust online