aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2020-05-09 16:04:06 +0200
committerQuentin Dufour <quentin@deuxfleurs.fr>2020-05-09 16:04:06 +0200
commit76c84042120b97ee98af6a1c40ab86aca062408a (patch)
treee7e298a13c0b91a28aa1d939aae0408cae0a24dd
parenta19ae25a7d20d338243e2fef5a1fd45437701c2a (diff)
downloaddiplonat-76c84042120b97ee98af6a1c40ab86aca062408a.tar.gz
diplonat-76c84042120b97ee98af6a1c40ab86aca062408a.zip
Rewrite with anyhow
-rw-r--r--Cargo.lock5
-rw-r--r--Cargo.toml1
-rw-r--r--src/config.rs38
-rw-r--r--src/diplonat.rs3
4 files changed, 16 insertions, 31 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 9970039..6fd2e35 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -11,9 +11,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.26"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7825f6833612eb2414095684fcf6c635becf3ce97fe48cf6421321e93bfbd53c"
+checksum = "d9a60d744a80c30fcb657dfe2c1b22bcb3e814c1a1e3674f32bf5820b570fbff"
[[package]]
name = "attohttpc"
@@ -124,6 +124,7 @@ checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
name = "diplonat"
version = "0.1.0"
dependencies = [
+ "anyhow",
"igd",
"log",
"pretty_env_logger",
diff --git a/Cargo.toml b/Cargo.toml
index 7771e70..1164d5f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,3 +13,4 @@ log = "0.4"
pretty_env_logger = "0.4"
tokio = "0.2.11"
serde = "1.0.107"
+anyhow = "1.0.28"
diff --git a/src/config.rs b/src/config.rs
index bbc1b33..2cf2061 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -1,5 +1,5 @@
use std::env;
-
+use anyhow::{Result, anyhow};
use log::*;
pub struct DiplonatConfig {
@@ -9,41 +9,23 @@ pub struct DiplonatConfig {
pub expiration_time: u32
}
-pub fn load_env() -> Result<DiplonatConfig, String> {
+pub fn load_env() -> Result<DiplonatConfig> {
let env_private_ip = "DIPLONAT_PRIVATE_IP";
- let private_ip = match env::var(env_private_ip) {
- Ok(val) => val,
- Err(e) => return Err(format!("unable to fetch environment variable {}: {}", env_private_ip, e)),
- };
-
let env_refresh_time = "DIPLONAT_REFRESH_TIME";
- let refresh_time: u32 = match env::var(env_refresh_time) {
- Ok(val) => val.parse().unwrap(),
- Err(e) => return Err(format!("unable to fetch environment variable {}: {}", env_refresh_time,e))
- };
-
let env_expiration_time = "DIPLONAT_EXPIRATION_TIME";
- let expiration_time: u32 = match env::var(env_expiration_time) {
- Ok(val) => val.parse().unwrap(),
- Err(e) => return Err(format!("unable to fetch environment variable {}: {}", env_expiration_time,e))
- };
-
let env_consul_node_name = "DIPLONAT_CONSUL_NODE_NAME";
- let consul_node_name = match env::var(env_consul_node_name) {
- Ok(val) => val,
- Err(e) => return Err(format!("unable to fetch environment variable {}: {}", env_consul_node_name,e))
+
+ let config = DiplonatConfig {
+ private_ip: env::var(env_private_ip)?,
+ refresh_time: env::var(env_refresh_time)?.parse()?,
+ expiration_time: env::var(env_expiration_time)?.parse()?,
+ consul_node_name: env::var(env_consul_node_name)?
};
- if refresh_time * 2 > expiration_time {
- return Err(format!("Expiration time (currently: {}s) must be twice bigger than refresh time (currently: {}s)", expiration_time, refresh_time))
+ if config.refresh_time * 2 > config.expiration_time {
+ return Err(anyhow!("Expiration time (currently: {}s) must be twice bigger than refresh time (currently: {}s)", config.expiration_time, config.refresh_time))
}
- let config = DiplonatConfig {
- private_ip: private_ip,
- refresh_time: refresh_time,
- expiration_time: expiration_time,
- consul_node_name: consul_node_name
- };
info!("Consul node name: {}", config.consul_node_name);
info!("Private IP address: {}", config.private_ip);
info!("Refresh time: {} seconds", config.refresh_time);
diff --git a/src/diplonat.rs b/src/diplonat.rs
index 44f6ac5..089a5c7 100644
--- a/src/diplonat.rs
+++ b/src/diplonat.rs
@@ -1,4 +1,5 @@
use igd::Gateway;
+use anyhow::Result;
use crate::*;
@@ -7,7 +8,7 @@ pub struct DiplonatContext {
//pub gateway: igd::Gateway
}
-pub fn setup() -> Result<DiplonatContext, String> {
+pub fn setup() -> Result<DiplonatContext> {
return Ok(DiplonatContext {
config: config::load_env()?,
//gateway: search_gateway(Default::default()).await