use detector::{Meta, Service, ServiceKey, Services};
use std::collections::HashMap;
pub(crate) fn parse_meta_response(resp: etcd_client::GetResponse) -> Vec<Meta> {
let revision = Some(resp.header().unwrap().revision());
let mut metas = vec![];
for kv in resp.kvs() {
let mut res = serde_json::from_slice::<Meta>(kv.value());
res = res.map(|mut m| {
m.revision = revision;
m
});
if res.is_ok() {
metas.push(res.unwrap());
}
}
metas
}
pub(crate) fn parse_service_response(resp: etcd_client::GetResponse) -> HashMap<String, Services> {
let revision = Some(resp.header().unwrap().revision());
let mut hm = HashMap::new();
for kv in resp.kvs() {
let key = ServiceKey::try_from(kv.key());
if key.is_ok() {
let mut value = serde_json::from_slice::<Service>(kv.value());
value = value.map(|mut m| {
m.revision = revision;
m
});
if value.is_ok() {
let name = key.unwrap().name;
let services = match hm.get_mut(&name) {
Some(s) => s,
None => {
hm.insert(name.clone(), Services::new());
hm.get_mut(&name).unwrap()
}
};
services.services.push(value.unwrap());
}
}
}
hm
}