Menu
Coddy logo textTech

Componente de botón

Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 51 de 61.

challenge icon

Desafío

Fácil

Continuemos creando nuestro sistema de documentos al añadir un segundo componente de UI: un Button. Al igual que TextField, este componente implementará el trait Draw, demostrando cómo distintos tipos pueden compartir una interfaz común.

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

  • draw.rs: Conserva tu trait Draw de los desafíos anteriores.
  • text_field.rs: Conserva 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 llamar a draw() muestre el botón con este formato: Button: {label} (width: {width})
  • main.rs: Incluye los tres módulos. Crea tanto un TextField como un Button y, después, llama a draw() en cada uno para renderizar ambos componentes.

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

Se proporcionarán las siguientes entradas:

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

Tu salida deberá mostrar primero el campo de texto y después el botón, cada uno en su propia línea:

Text: Welcome
Button: Submit (width: 100)
FORMATO DE SALIDA REQUERIDO: [Tu contenido traducido aquí]

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 Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Rust online