project:
  https://github.com/github/gitignore
  api: https://developer.github.com/v3/

contains:
  root: common templates
  Global: tools/OS specific templates
  community: very specific templates


Requests [https://stackoverflow.com/questions/25022016/get-all-file-names-from-a-github-repo-through-the-github-api]:
1. https://api.github.com/repos/github/gitignore/commits?per_page=1
    grab the tree sha

2. https://api.github.com/repos/github/gitignore/git/trees/{tree_sha}?recursive=true

Send each with:
  Authorization: token `OAUTH-TOKEN`

Unauthenticated is 60 requests per hour
Authenticated (with Basic Authentication or OAuth), 5000 requests per hour


RequestMaker
  Hide requests behind
GithubRequestMaker
  Hide Github-specific requests behind

Idea: GithubRequestMaker can compose a RequestMaker
	  For tests, GithubRequestMaker can compose a TestRequestMaker ;)


Rust applications are not asynchronous by default
If you want to use asynchronous methods within our program, we need the `Tokio` framework
  `Tokio` is apparently an asynchronous runtime for Rust
  used in most reqwest examples
EXCEPT: If we use the (optional) blocking module, we dont need this junk :)



TODO:
  Look into failure crate (easier error handling?)


Use exa as an example to download and install from cargo (crates.io)
	"Cargo will build the exa binary and place it in $HOME/.cargo (this location can be overridden by setting the --root option)."
Has a CI build, but may not be necessary?
https://github.com/ogham/exa

