Por que a acessibilidade em Rust não é uma opção, mas uma necessidade
Quando escrevemos em Rust, estamos acostumados a pensar em segurança de memória, velocidade e abstrações de custo zero. Mas há outro aspecto que muitas vezes fica em segundo plano — acessibilidade (accessibility). Muitos desenvolvedores acham que isso é preocupação apenas de frontenders ou designers. Na realidade — todos que escrevem código em Rust podem tornar suas ferramentas, bibliotecas ou aplicações web acessíveis para pessoas com deficiências.
Segundo a OMS, mais de 1 bilhão de pessoas no mundo têm alguma forma de deficiência. É um público enorme que perdemos se ignorarmos a inclusividade em Rust. E não se trata apenas de usuários cegos — a acessibilidade ajuda a todos: desde pessoas com lesões temporárias até aquelas que trabalham em ambientes barulhentos ou dirigindo.
Neste artigo, vamos abordar como implementar a11y (abreviação de accessibility) em projetos Rust de diferentes tipos: utilitários CLI, aplicações web e GUI. Você verá exemplos reais de código que podem ser usados imediatamente em seus projetos.
Acessibilidade em CLI: tornando o console acessível para todos
Parece que o terminal é o último lugar onde a acessibilidade é necessária. Mas é justamente aqui que muitas vezes trabalham pessoas com deficiências visuais ou motoras. A acessibilidade em Rust CLI começa com coisas simples:
- Mensagens de erro claras — use
eprintln!para exibir erros, para que possam ser redirecionados separadamente para um log ou lidos por um leitor de tela. - Esquemas de cores — não dependa apenas de cores. Adicione símbolos ou texto:
[OK],[ERRO]. - Saída compreensível — evite tabelas complexas sem legendas.
Aqui está um exemplo de uma ferramenta CLI minimalista em Rust considerando acessibilidade:
use std::io::{self, Write};
fn main() { print!("Digite seu nome: "); io::stdout().flush().unwrap();
let mut name = String::new(); io::stdin().read_line(&mut name).unwrap(); let name = name.trim();
if name.is_empty() { eprintln!("[ERRO] O nome não pode estar vazio."); std::process::exit(1); }
println!("[OK] Olá, {}! Prazer em vê-lo.", name);}Observe: usamos eprintln! para erros — esta é a maneira padrão de acessibilidade em Rust CLI. O usuário pode redirecionar o stderr para um fluxo ou arquivo separado, e os leitores de tela processam essa saída mais facilmente.
Acessibilidade web em Rust: Yew e WASM
Frameworks web modernos em Rust, como Yew, Leptos ou Dioxus, permitem criar SPAs completos. E aqui a acessibilidade web Rust não é apenas sobre tags, mas uma decisão arquitetural.
Princípios básicos das WCAG (Web Content Accessibility Guidelines) que devem ser seguidos:
- Contraste — o texto deve ser legível contra o fundo.
- Navegação por teclado — todos os elementos devem ser acessíveis via Tab.
- Atributos ARIA — rótulos adicionais para leitores de tela.
- Marcação semântica — use tags HTML corretas.
Exemplo de um componente em Yew considerando atributos ARIA em Rust:
use yew::prelude::*;
#[function_component(AccessibleButton)]pub fn accessible_button() -> Html { html! { <button class="btn btn-primary" aria-label="Enviar formulário" role="button" tabindex="0" onkeypress={|e| { if e.key() == "Enter" || e.key() == " " { // Processamento do clique } }} > { "Enviar" }