README.md

# Rifle

Rifle is a wrapper over [Gun](https://github.com/ninenines/gun). Rifle also provides pooling for Gun and reuses connections. Currently *WIP*

## Installation

`Rifle` is available as a Hex package. You need to add `gun`, before adding `rifle` to your `deps()` in `mix.exs`.


```elixir
defp deps do
  [
    {:gun, "== 1.0.0-pre.5"},
    {:rifle, "~> 0.1"}
  ]
end
```

## Usage

In `Rifle`, you need to define a service(a domain and port to connect to). Then Rifle spawns a pool of Gun connections and spreads the requests on the pool of connections. Requests can be made on a service or pool.

To create a pool, you can add this line to your supervisor.

`{Rifle, %{name: :httpbin, domain: "httpbin.org", port: 443, pool_size: 10}}`

#### Options can contain:

- `name` - This needs to be the name of the pool or service. Needs to be unique.
- `domain` - Domain of the service
- `port` - Port it needs to connect to. If `443` is provided, it will automatically use TLS.
- `pool_size` - Number of `Gun` connections to create.

Adding this line will create supervisor with pool of connections.

#### For making requests:

`Rifle.get/4`, `Rifle.post/5`, `Rifle.delete/5`, `Rifle.put/5`, `Rifle.head/5`, `Rifle.options/5` or `requests/6` can be used to place requests.


## TODO 

- [x] HTTP 1.1 & HTTP 2 support
- [ ] Websockets support
- [ ] Better Documentation