# Todors
TODO app, mainly for a practical learning experience of Rust
[![Code Size](https://img.shields.io/github/languages/code-size/meysam81/todors)](https://github.com/meysam81/todors)
[![codecov](https://codecov.io/gh/meysam81/todors/branch/main/graph/badge.svg?token=LILKTIMNSJ)](https://codecov.io/gh/meysam81/todors)
[![Repo Size](https://img.shields.io/github/repo-size/meysam81/todors)](https://github.com/meysam81/todors)
[![Docs](https://img.shields.io/badge/docs-rs/todors?logo=docs.rs&label=docs.rs)](https://crates.io/crates/todors)
[![Language Count](https://img.shields.io/github/languages/count/meysam81/todors)](https://github.com/meysam81/todors)
[![Commit Intervals](https://img.shields.io/github/commit-activity/m/meysam81/todors)](https://github.com/meysam81/todors/commits)
[![Last Release](https://img.shields.io/github/release-date/meysam81/todors?label=last%20release)](https://github.com/meysam81/todors/releases)
[![GitHub Repo stars](https://img.shields.io/github/stars/meysam81/todors?style=flat&label=GitHub%20Stars)](https://github.com/meysam81/todors/stargazers)
[![GitHub Release Downloads](https://img.shields.io/github/downloads/meysam81/todors/total?label=GitHub%20Release%20Downloads)](https://github.com/meysam81/todors/releases)
[![Cargo Crate](https://img.shields.io/crates/v/todors)](https://crates.io/crates/todors)
[![Crate Download](https://img.shields.io/crates/d/todors?label=crate%20download)](https://crates.io/crates/todors)
[![Docker pulls](https://img.shields.io/docker/pulls/meysam81/todors?label=Docker%20pulls)](https://hub.docker.com/r/meysam81/todors)
[![Docker Image](https://img.shields.io/docker/image-size/meysam81/todors?label=Docker%20image)](https://hub.docker.com/r/meysam81/todors)
[![License](https://img.shields.io/github/license/meysam81/todors)](https://github.com/meysam81/todors)
- [Todors](#todors)
- [Installation](#installation)
- [Cargo](#cargo)
- [Download binary](#download-binary)
- [Docker](#docker)
- [Usage](#usage)
- [REST API doc](#rest-api-doc)
- [Online](#online)
- [Local](#local)
- [Run HTTP server](#run-http-server)
- [Visit URL](#visit-url)
- [gRPC API doc](#grpc-api-doc)
- [Look at the proto files](#look-at-the-proto-files)
- [Run gRPC server](#run-grpc-server)
- [Help](#help)
## Installation
### Cargo
```bash
cargo install todors
```
### Download binary
You can also head over to the
[GitHub release page](https://github.com/meysam81/todors/releases/latest) and download the
binary for your platform.
### Docker
```bash
docker pull meysam81/todors
# or
docker pull ghcr.io/meysam81/todors
```
## Usage
The usage is as follows:
```bash
todors serve grpc -p 50051 -H 127.0.0.1
todors serve http -p 8000 -H 127.0.0.1
# Both port & host are optional, but ipv6 can also be used
todors serve http -H ::1
todors create "My first todo"
todors list
todors update 1 --title "My first todo updated"
todors update 1 --done
todors update 1 --undone
todors delete 1
todors completion bash | sudo tee /etc/bash_completion.d/todors
```
### REST API doc
#### Online
#### Local
##### Run HTTP server
```bash
todors serve http
```
##### Visit URL
### gRPC API doc
#### Look at the proto files
[proto directory](./proto)
#### Run gRPC server
```bash
todors serve grpc
# exposed at localhost:50051
```
## Help
```bash
Usage: todors
Commands:
serve Serve either the gRPC or REST over HTTP server
create Create a new TODO with a title
delete Delete a TODO by ID
list List all TODOs
update Update a TODO by ID
completion Generate shell completion
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
```