wireguard-conf 1.1.0

Generate Wireguard configs and interfaces with code
# Migration

## `v1.1.0`

This isn't breaking, but it's recommended to specify AmneziaWG version

Currently `amneziawg` enables `amneziawg-1`, but in next major release this flag (`amneziawg`) will be removed.

Either:

- Change to `amneziawg-1`

  ```patch
  -wireguard-conf = { version = "1.0.1", features = ["amneziawg"] }
  +wireguard-conf = { version = "1.1.0", features = ["amneziawg-1"] }
  ```

- Migrate to `amneziawg-2` (this will break old configs, due to `H` values now being ranged)

  ```toml
  wireguard-conf = { version = "1.1.0", features = ["amneziawg-2"] }
  ```

## `v1.0.0`

First major release brought many changes. Breaking changes are builder structure and `Peer::to_interface` signature.

### Builders & models themselves

Now they are generated with `derive_builder`.

1. Removal of `set_*` and `add_*` builder methods.
   ```diff
    let interface = InterfaceBuilder::new()
   -    .add_dns("1.1.1.1".to_string())
   -    .add_dns("1.0.0.1".to_string())
   -    .set_peers(vec![peer1, peer2])
   -    .add_peer(somepeer)
   -    .add_post_up("rm -rf /".to_string())
   +    .dns(["1.1.1.1".to_string(), "1.0.0.1".to_string()])
   +    .peers([peer1, peer2, somepeer])
   +    // or .peers(vec![peer1, peer2, somepeer])
   +    .post_up(["rm -rf /".to_string()])
        .build();
   ```
2. Support for multiple addresses
    ```diff
     let interface = InterfaceBuilder::new()
    -    .address(as_ipnet!("10.0.0.1/24"))
    +    .address([as_ipnet!("10.0.0.1/24")])
    +    // or .add_network(as_ipnet!("10.0.0.1/24"))
         .build();
    ```

### `Peer::to_interface()`

Now this method requires additional 2nd argument `ToInterfaceOptions`.

```diff
 let client_interface = client_peer.to_interface(
     &server_interface,
+    ToInterfaceOptions::new(),
 );
```

With these options, you skip writing boilerplate.

- Default gateway
  ```diff
   let client_interface = client_peer.to_interface(
       &server_interface,
  +    ToInterfaceOptions::new()
  +        .default_gateway(true),
   );

  -client_interface.peers[0].allowed_ips = vec![as_ipnet("0.0.0.0/0")];
  ```

- `PersistentKeepalive`
  ```diff
   let client_interface = client_peer.to_interface(
       &server_interface,
  +    ToInterfaceOptions::new()
  +        .persistent_keepalive(25),
   );

  -client_interface.peers[0].persistent_keepalive = 25;
  ```