From 2a6b440270dc5d9b18061b69f8f700793d1ad0eb Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 21 May 2020 23:04:21 +0200 Subject: [PATCH] Working Consul --- Cargo.lock | 19 +++++++++++++++++-- Cargo.toml | 3 ++- src/consul.rs | 33 +++++++++++++++++++++++++++++++++ src/main.rs | 23 ++++++++--------------- src/messages.rs | 0 5 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 src/messages.rs diff --git a/Cargo.lock b/Cargo.lock index 8299558..11ae2f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -131,6 +131,7 @@ dependencies = [ "pretty_env_logger", "reqwest", "serde", + "serde_json", "tokio", ] @@ -969,12 +970,26 @@ name = "serde" version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eba7550f2cdf88ffc23ab0f1607133486c390a8c0f89b57e589b9654ee15e04d" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10be45e22e5597d4b88afcc71f9d7bfadcd604bf0c78a3ab4582b8d2b37f39f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "serde_json" -version = "1.0.47" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15913895b61e0be854afd32fd4163fcd2a3df34142cf2cb961b310ce694cbf90" +checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2" dependencies = [ "itoa", "ryu", diff --git a/Cargo.toml b/Cargo.toml index 2e6eb3f..14e6488 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,5 +13,6 @@ log = "0.4" pretty_env_logger = "0.4" tokio = "0.2.11" futures = "0.3.5" -serde = "1.0.107" +serde = { version = "1.0.107", features = ["derive"] } +serde_json = "1.0.53" anyhow = "1.0.28" diff --git a/src/consul.rs b/src/consul.rs index e69de29..e438605 100644 --- a/src/consul.rs +++ b/src/consul.rs @@ -0,0 +1,33 @@ +use serde::{Serialize, Deserialize}; +use std::collections::HashMap; +use anyhow::Result; + +#[derive(Serialize, Deserialize, Debug)] +pub struct ServiceEntry { + Tags: Vec +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct CatalogNode { + Services: HashMap +} + +pub struct Consul { + client: reqwest::Client, + url: String +} + +impl Consul { + pub fn new(url: &str) -> Self { + return Self { + client: reqwest::Client::new(), + url: url.to_string() + }; + } + + pub async fn catalog_node(&self, host: &str) -> Result { + let url = format!("{}/v1/catalog/node/{}", self.url, host); + let resp: CatalogNode = self.client.get(&url).send().await?.json().await?; + return Ok(resp) + } +} diff --git a/src/main.rs b/src/main.rs index d5656aa..ead8c32 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,24 @@ -mod diplonat; -mod node_state; -mod environment_adapter; -mod igd_adapter; +mod consul; //use std::net::SocketAddrV4; //use std::collections::HashMap; //use igd::PortMappingProtocol; use log::*; -use node_state::*; -use diplonat::*; +use consul::*; #[tokio::main] async fn main() { pretty_env_logger::init(); info!("Starting Diplonat"); - +/* let diplo = Diplonat::new().await.expect("Setup failed"); diplo.listen().await.expect("A runtime error occured"); -/* - let url = format!("http://127.0.0.1:8500/v1/catalog/node/{}", config.consul_node_name); - let resp = reqwest::get(&url) - .await - .unwrap(); - //.json::>() - //.await.unwrap(); - println!("{:#?}", resp); +*/ + let c = Consul::new("http://127.0.0.1:8500"); + let cn = c.catalog_node("lheureduthe").await.expect("Failed to fetch API"); + println!("{:#?}", cn); +/* let gateway = match search_gateway(Default::default()).await { Ok(g) => g, Err(err) => return println!("Faild to find IGD: {}", err), diff --git a/src/messages.rs b/src/messages.rs new file mode 100644 index 0000000..e69de29