Menu
Coddy logo textTech

Componente de botón

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy. Lección 51 de 61.

challenge icon

Desafío

Fácil

Continuemos construyendo nuestro Sistema de Documentos agregando un segundo componente de UI: un Button. Al igual que el TextField, este componente implementará el trait Draw, demostrando cómo diferentes tipos pueden compartir una interfaz común.

Expandirás tu proyecto con otro archivo de módulo:

  • draw.rs: Mantén tu trait Draw de los desafíos anteriores.
  • text_field.rs: Mantén tu estructura TextField y su implementación de Draw.
  • button.rs: Crea una estructura Button con dos campos públicos: label (un String) y width (un u32). Implementa el trait Draw para Button de modo que al llamar a draw() se imprima el botón en este formato: Button: {label} (width: {width})
  • main.rs: Incorpora los tres módulos. Crea tanto un TextField como un Button, luego llama a draw() en cada uno para renderizar ambos componentes.

Tu módulo button necesitará acceder al trait Draw usando crate::draw::Draw, tal como hiciste con TextField.

Se proporcionarán las siguientes entradas:

  • Primera línea: el contenido del campo de texto (text field)
  • Segunda línea: la etiqueta (label) del botón
  • Tercera línea: el ancho (width) del botón (como un número)

Tu salida debe mostrar primero el campo de texto y luego el botón, cada uno en su propia línea:

Text: Welcome
Button: Submit (width: 100)

Pruébalo tú mismo

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: Crear un Button con `label` y `width`, luego llamar a draw()
    
}

Todas las lecciones de Object Oriented Programming

Practica por tu cuenta: Compilador de Rust online