wireguard_conf/
lib.rs

1//! Easy to use Wireguard config generator.
2//!
3//! - Use [`InterfaceBuilder`] and [`PeerBuilder`] for interface/peers creation.
4//! - Use [`Interface`]'s and [`Peer`]'s [`std::fmt::Display`] for exporting  Wireguard config (`.to_string()`, [`write!()`], etc).
5//! - Use [`PrivateKey`], [`PublicKey`] and [`PresharedKey`] for generating, importing and
6//!   exporting keys.
7//! - Use [`AmneziaSettings`] for generating/using AmneziaWG obfuscation values.
8//!
9//! # Features
10//!
11//! - `amneziawg` -- adds AmneziaWG obfuscation values support [(see)](https://docs.amnezia.org/documentation/amnezia-wg/).
12//! - `serde` -- adds implementions of [`serde::Serialize`] and [`serde::Deserialize`] for all
13//!   structs.
14//!
15//! # Example
16//!
17//! ```rust
18//! use wireguard_conf::prelude::*;
19//! use wireguard_conf::as_ipnet;
20//!
21//! let peer = Peer::builder()
22//!     .allowed_ips([as_ipnet!("10.0.0.2/24")])
23//!     .build();
24//!
25//! let interface = Interface::builder()
26//!     .address([as_ipnet!("10.0.0.1/24")])
27//!     .peers([peer.clone()])
28//!     .build();
29//!
30//! // to export configs, use `println!()`, `writeln!()`, `.to_string()`, etc.
31//!
32//! println!("Server's config:");
33//! println!("{}\n", interface);
34//!
35//! println!("Client's config:");
36//! println!("{}", peer.to_interface(&interface, ToInterfaceOptions::new()).unwrap());
37//! ```
38
39#![warn(clippy::pedantic)]
40#![allow(clippy::doc_markdown)]
41#![warn(missing_docs)]
42#![cfg_attr(docsrs, feature(doc_cfg))]
43
44mod macros;
45mod models;
46mod utils;
47
48pub mod prelude;
49
50pub use ipnet;
51
52pub use models::*;
53pub use utils::*;