Como construir uma task-list no Rust: um tutorial passo a passo — parte 2
Na primeira parte desse tutorial, nós aprendemos a instalar e configurar o ambiente para desenvolver programas em Rust e desenvolvemos os…
Como construir uma task-list no Rust: um tutorial passo a passo — parte 2
Na primeira parte desse tutorial, nós aprendemos a instalar e configurar o ambiente para desenvolver programas em Rust e desenvolvemos os recursos de adição, listagem e remoção de tasks da nossa task-list. Nessa segunda parte nós vamos adicionar horários, prioridades, retorno de tabelas e cores para tornar o nosso programa mais intuitivo.

Antes de começarmos…
Antes de darmos início a essa jornada, é de suma importância que você tenha lido a parte 1 desse tutorial. Caso não tenha lido, deixarei o link abaixo:
Instalando dependências
Para instalar dependências no Rust é muito simples, basta visitar esse site, buscar as dependências necessárias e seguir os passos de instalação. Há duas formas de instalar: adicionando a dependência no arquivo cargo.toml e rodando o comando cargo build ou diretamente pela CLI.
[embed]crates.io: Rust Package Registry Edit descriptioncrates.io
Para esse tutorial, nós vamos precisar de três dependências:
- prettytable-rs: nos permite adicionar tabelas as nossas aplicações
- colored: nos permitir adicionar cores as mensagens de saída
- chrono: recurso de horário e data.
Para instalar é muito simples, basta deixar o seu arquivo cargo.toml dessa maneira e rodar o comando cargo build na raiz do seu projeto:

Reestruturando o código
Para importar as dependências instaladas, basta ir até o arquivo main.rs e adicionar a seguinte estrutura no topo do código:

Enum Priority e Struct TodoList
O enum, diferente de uma struct, não tem tipo, apenas campos. Para o propósito do nosso projeto, ele serve par limitar as entradas de usuário no campo de prioridades. Vejamos abaixo como vai ficar o nosso enum:

Os usuários só poderão adicionar esses valores no campo de prioridades: **Baixa, Média e Alta, **criando um controle de validação muito eficiente.
Também precisamos modificar a struct TodoList para receber o horário e os valores de prioridades. Vejamos abaixo como vai ficar a nossa struct reestruturada:

Pronto! agora nossas tasks aceitam mais dois campos: horário e prioridades.
Novo método add_tasks
Como modificamos a nossa struct, também será necessário refatorar todos os nossos métodos do impl. O primeiro será o responsável por adicionar novas tasks:

Não tiveram tantas modificações significativas nesse método, apenas os novos parâmetros e a mensagem de sucesso.
Método read_task
Será neste método onde vamos construir o recurso para editar as tasks. Finalmente teremos um CRUD — Create, Read, Update e Delete (Criação, Leitura, Edição/Atualização e Remoção). É importante mencionar também que o método read_task será parte do add_task. Este método será um pouco mais longo que os outros.

Esta estrutura recebe o valor da tarefa e a guarda no parâmetro task

Esta recebe o valor do horário e guarda no parâmetro time

Esta estrutura guarda o valor da prioridade e ele precisa estar na Enum que criamos no inicio
Método list_task
Este método tem como responsabilidade retornar e listar as tasks já salvas. Ele também precisa ser refatorado e para melhorar o retorno, vamos adicionar tabelas e cores. Então se preparem para usar as duas outras dependências que adicionamos no inicio desse tutorial.

Método remove_task
Este método será responsável por remover as tasks da lista, se eu não me engano, esta exatamente como da primeira:

Lembrando que todas esses métodos estão dentro do impl TodoList
Função Main
Agora nós vamos começar a refatorar a função principal do nosso programa para adaptá-la as mudanças do impl.

Na estrutura acima nós instanciamos os objetos necessários e damos inicio a construção do nosso loop com o menu da aplicação. Veja como vai ficar o seu menu principal depois dessas mudanças.
Obs. Pode ser que o seu código não funcione ainda, pois precisamos refatorar o operador match. Caso ocorra algum erro, não se preocupe, este é apenas um exemplo visual

Percebam que, além do título, as linhas não estão com separados, exatamente como essa estrutura está determinando:
table.set_format(*prettytable::format::consts::FORMAT_NO_LINESEP_WITH_TITLE);
Operador Match
Como já mencionamos no tutorial anterior, o operador match verifica o valor de entrada do usuário e executa a estrutura predeterminada.

Esta estrutura é responsável por executar o add_list

Essa estrutura é responsável por listar as tarefas caso o usuário entre com o valor 2 e editar a task selecionada caso o usuário entre com o valor 3. Com essa estrutura nós finalmente completamos o CRUD da nossa aplicação task-list. Agora só falta adicionar o remove_task no valor 4 e pronto, teremos as quatro operações básicas:

Pronto, nosso código está completo e já podemos adicionar as nossas tarefas com o horário que desejamos e a prioridade.
Aplicação completa e execução
Apenas para que não haja duvidas, vou disponibilizar a estrutura do código completo para comparações:
importações, enum e struct

Impl TodoList

Função main

Lindo, né? Para executar o programa task-list, basta rodar o comando cargo run na raiz do projeto. Vejamos o código em execução:
Adicionando uma tarefa
vamos ver um exemplo de como adicionar uma tarefa na nossa aplicação e o retorno que teremos:

Listando as tarefas
agora vamos ver como vai ficar a tarefa listada na nossa aplicação e o retorno:

CONCLUSÃO
Agora nós temos uma aplicação completa, mas ainda temos algumas coisas para fazer como: melhorar a estrutura do código, dividir ele para ficar mais organizado, consertar os bugs, adicionar mais recursos e etc, o que ficará para os próximos tutoriais.
Até a próxima.
메타데이터
- post_id
- b1efc462d3a9
- slug
- como-construir-uma-task-list-no-rust-um-tutorial-passo-a-passo-parte-2-b1efc462d3a9
- url
- https://medium.com/@franklyn-sanc/como-construir-uma-task-list-no-rust-um-tutorial-passo-a-passo-parte-2-b1efc462d3a9
- canonical_url
- https://medium.com/@franklyn-sanc/como-construir-uma-task-list-no-rust-um-tutorial-passo-a-passo-parte-2-b1efc462d3a9
- author_url
- https://medium.com/@franklyn-sanc
- status
- ok
- fetched_at
- 2026-08-10 12:01:12