1#![crate_name = "knusbaum_consul"]
31#![crate_type = "lib"]
32
33#[macro_use]
34extern crate serde_derive;
35extern crate serde;
36extern crate serde_json;
37extern crate reqwest;
38
39pub use agent::{Agent, AgentMember};
41pub use catalog::{Catalog, ServiceNode};
42pub use health::Health;
43pub use client::Client;
44pub use keystore::Keystore;
45pub use session::Session;
46pub use structs::{Node, Service, HealthService, RegisterService, TtlHealthCheck};
47
48mod agent;
49mod catalog;
50mod structs;
51mod health;
52mod client;
53mod session;
54mod keystore;
55mod request;
56mod error;
57
58use serde_json::Value;
59pub use error::ConsulResult;
60
61#[inline]
62pub fn get_string(json_data: &Value, path: &[&str]) -> Option<String> {
63 let mut pointer_str = String::new();
64 for entry in path.iter() {
65 pointer_str = format!("{}/{}", pointer_str, entry);
66 }
67
68 json_data.pointer(&pointer_str)
69 .and_then(|value| {
70 value.as_str()
71 .and_then(|value| Some(value.to_owned()))
72 })
73}
74
75#[inline]
76pub fn find_path<'a>(json_data: &'a Value, path: &[&str]) -> Option<&'a Value> {
77 let mut pointer_str = String::new();
78 for entry in path.iter() {
79 pointer_str = format!("{}/{}", pointer_str, entry);
80 }
81
82 json_data.pointer(&pointer_str)
83}