catr é um utilitário de linha de comando (Command-Line Interface - CLI) simples, inspirado no comando cat do Unix, projetado para demonstrar os fundamentos da linguagem Rust, com foco em:
- Manipulação de argumentos de linha de comando.
- Interação segura com o sistema de arquivos (
std::fs). - Tratamento de erros robusto usando o tipo
Result<T, E>e o operador?.
Este projeto é nosso ponto de partida no Roadmap de Sistemas em Rust.
Certifique-se de ter o rustup e o cargo instalados:
curl --proto '=https' --tlsv1.2 -sSf [https://sh.rustup.rs](https://sh.rustup.rs) | sh
## Compilação e Execução
1- Clone o repositório (ou navegue até a pasta do seu projeto catr).
2- Execute o projeto usando o cargo run, passando o nome do arquivo como argumento.
```bash
# 1. Crie um arquivo de exemplo
echo -e "Linha 1: Olá, Rust!\nLinha 2: Segurança e Performance!\nLinha 3: Usabilidade!" > meu_arquivo.txt
# 2. Execute o catr
cargo run meu_arquivo.txtRunning target/debug/catr meu_arquivo.txt
Lendo arquivo: meu_arquivo.txt
--- Conteúdo do Arquivo ---
Linha 1: Olá, Rust! Linha 2: Segurança e Performance! Linha 3: Usabilidade!
🚨 Tratamento de Erros catr demonstra o tratamento de erros idiomático do Rust. Em vez de entrar em panic (pânico), ele retorna um código de erro limpo ao sistema operacional.
Exemplo de Erro 1: Arquivo Inexistente
cargo run arquivo_que_nao_existe.xyzRunning `target/debug/catr arquivo_que_nao_existe.xyz`
Lendo arquivo: arquivo_que_nao_existe.xyz
Error: Os { code: 2, kind: NotFound, message: "No such file or directory" }cargo run
Running `target/debug/catr`
Error: Custom { kind: InvalidInput, error: "Uso: catr <nome-do-arquivo>" }🔑 Conceitos de Rust Demonstrados O código-fonte (src/main.rs) é pequeno, mas contém conceitos cruciais da linguagem:
| Conceito | Explicação | Módulo |
|---|---|---|
| std:env | Módulo usado para coletar arqumentos da linha de comnado, interagindo com o sistema. | use std::env; |
| std:fs | Módulo para operações de I/O do sistema de arquivos, como a função read_to_string. | use std::fs; |
| Result,E> | O tipo de retorno de fuynção main, garantindo que todas as falhas de I/O sejam tradas. | fn main() -> Result<(),io::Error> |
| Operador ? | Operador de propagação de erro conciso. Desempacota o valor de sucesso ou retorno o erro da função. | fs::read_to_string(finame)? |
Feito com 💜 e 🦀 por [Wanderley/https://github.com/wanderleycabral-dev]