Add ability to get collection.
This commit is contained in:
parent
87ad809e07
commit
1b2411436d
|
|
@ -121,6 +121,12 @@ impl DiagnosticStatus {
|
||||||
return to_return;
|
return to_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn copy_with_new_name(&self, name: String) -> Self {
|
||||||
|
let mut to_return = self.clone();
|
||||||
|
to_return.name = name;
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
fn clean_name(name: &str) -> String {
|
fn clean_name(name: &str) -> String {
|
||||||
// Remove prefix "/"
|
// Remove prefix "/"
|
||||||
let without_prefix = name.strip_prefix("/").unwrap_or(name);
|
let without_prefix = name.strip_prefix("/").unwrap_or(name);
|
||||||
|
|
|
||||||
38
src/lib.rs
38
src/lib.rs
|
|
@ -9,10 +9,6 @@
|
||||||
// defined by the Mozilla Public License, v. 2.0.
|
// defined by the Mozilla Public License, v. 2.0.
|
||||||
//
|
//
|
||||||
|
|
||||||
// Once all elements added, start at the edge nodes and travel up
|
|
||||||
// to mark levels of parent nodes.
|
|
||||||
// Depth first search from top to build new vector to return.
|
|
||||||
|
|
||||||
// TODO: Remove anyhow.
|
// TODO: Remove anyhow.
|
||||||
#![no_std]
|
#![no_std]
|
||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
|
|
@ -24,6 +20,7 @@ mod name_parsing;
|
||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
|
|
||||||
|
use crate::alloc::string::ToString;
|
||||||
use alloc::borrow::ToOwned;
|
use alloc::borrow::ToOwned;
|
||||||
use alloc::collections::BTreeMap;
|
use alloc::collections::BTreeMap;
|
||||||
use alloc::collections::VecDeque;
|
use alloc::collections::VecDeque;
|
||||||
|
|
@ -97,6 +94,21 @@ impl DiagnosticGraph {
|
||||||
return Ok(Some(cur_base_key));
|
return Ok(Some(cur_base_key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn full_name_from_key(&self, key: &limbo_graph::Key) -> anyhow::Result<String> {
|
||||||
|
let path_to_key = self.graph.backtrack_from_key(key)?;
|
||||||
|
let mut full_name = String::new();
|
||||||
|
|
||||||
|
for curr_key in path_to_key.iter() {
|
||||||
|
if *curr_key == self.graph.root_key() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let status = self.value_of(&curr_key)?;
|
||||||
|
full_name = full_name + "/" + &status.name();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(full_name)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn value_from_name(
|
pub fn value_from_name(
|
||||||
&self,
|
&self,
|
||||||
full_name: &String,
|
full_name: &String,
|
||||||
|
|
@ -225,6 +237,19 @@ impl DiagnosticGraph {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn export_graph(&self) -> anyhow::Result<Vec<DiagnosticStatus>> {
|
||||||
|
let keys_in_order = self.graph.get_keys_by_depth()?;
|
||||||
|
|
||||||
|
let mut statuses = Vec::<DiagnosticStatus>::new();
|
||||||
|
|
||||||
|
for key in keys_in_order.iter() {
|
||||||
|
let status_at_key = self.value_of(&key)?;
|
||||||
|
statuses.push(status_at_key.copy_with_new_name(self.full_name_from_key(&key)?));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(statuses)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
@ -329,7 +354,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn key_from_name() -> anyhow::Result<()> {
|
fn key_name_connections() -> anyhow::Result<()> {
|
||||||
let statuses = vec![
|
let statuses = vec![
|
||||||
make_a_status_with_name("/a"),
|
make_a_status_with_name("/a"),
|
||||||
make_a_status_with_name("/a/b"),
|
make_a_status_with_name("/a/b"),
|
||||||
|
|
@ -349,6 +374,9 @@ mod tests {
|
||||||
let not_in_graph = graph.key_from_full_name(&"/a/b/c".to_owned())?;
|
let not_in_graph = graph.key_from_full_name(&"/a/b/c".to_owned())?;
|
||||||
assert!(not_in_graph == None);
|
assert!(not_in_graph == None);
|
||||||
|
|
||||||
|
let name_for_e = graph.full_name_from_key(&4)?;
|
||||||
|
assert!(name_for_e == "/a/d/e".to_owned());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue