Pular para conteúdo

Mini-Projeto: Gerenciador de Tarefas CLI 📝

Neste projeto, você vai transformar os conceitos de CLI e manipulação de arquivos em uma ferramenta útil para o dia a dia: um gerenciador de tarefas (Todo List).

📋 Requisitos

  1. Interface Profissional: Use a crate clap para gerenciar os comandos.
  2. Comandos:
    • add "nome da tarefa": Adiciona uma tarefa ao arquivo tarefas.txt.
    • list: Lista todas as tarefas numeradas.
  3. Persistência: As tarefas devem ser salvas fisicamente no disco.

🚀 Guia de Execução

  1. No seu Cargo.toml, adicione: clap = { version = "4.0", features = ["derive"] }.
  2. Implementação sugerida:
    use clap::{Parser, Subcommand};
    use std::fs::{OpenOptions, read_to_string};
    use std::io::Write;
    
    #[derive(Parser)]
    struct Cli {
        #[command(subcommand)]
        comando: Comandos,
    }
    
    #[derive(Subcommand)]
    enum Comandos {
        Add { tarefa: String },
        List,
    }
    
    fn main() {
        let cli = Cli::parse();
    
        match cli.comando {
            Comandos::Add { tarefa } => {
                let mut arquivo = OpenOptions::new()
                    .append(true)
                    .create(true)
                    .open("tarefas.txt")
                    .unwrap();
                writeln!(arquivo, "{}", tarefa).unwrap();
                println!("Tarefa adicionada!");
            }
            Comandos::List => {
                let conteudo = read_to_string("tarefas.txt").unwrap_or_default();
                for (i, linha) in conteudo.lines().enumerate() {
                    println!("{}: {}", i + 1, linha);
                }
            }
        }
    }
    

✅ Critérios de Aceite

  • [ ] O projeto utiliza a crate clap com macros de derivação.
  • [ ] As tarefas persistem após o encerramento do programa.
  • [ ] O menu de --help é gerado automaticamente e está em português (via configurações do clap).