WIP now load plugins automatically

This commit is contained in:
Jonathan Turner
2019-07-04 05:37:09 +12:00
parent 75ddfe9f5a
commit 0180769971
25 changed files with 348 additions and 329 deletions

View File

@ -10,7 +10,7 @@ use derive_new::new;
// another_name : ...
#[derive(new)]
pub struct EntriesView {
entries: Vec<(crate::object::DescriptorName, String)>,
entries: Vec<(String, String)>,
}
impl EntriesView {
@ -23,7 +23,7 @@ impl EntriesView {
let formatted_value = value.borrow().format_leaf(None);
entries.push((desc.name.clone(), formatted_value))
entries.push((desc.clone(), formatted_value))
}
EntriesView::new(entries)
@ -36,20 +36,10 @@ impl RenderView for EntriesView {
return Ok(());
}
let max_name_size: usize = self
.entries
.iter()
.map(|(n, _)| n.display().len())
.max()
.unwrap();
let max_name_size: usize = self.entries.iter().map(|(n, _)| n.len()).max().unwrap();
for (name, value) in &self.entries {
println!(
"{:width$} : {}",
name.display(),
value,
width = max_name_size
)
println!("{:width$} : {}", name, value, width = max_name_size)
}
Ok(())

View File

@ -1,5 +1,5 @@
use crate::format::RenderView;
use crate::object::{DataDescriptor, Value};
use crate::object::Value;
use crate::prelude::*;
use derive_new::new;
use prettytable::format::{FormatBuilder, LinePosition, LineSeparator};
@ -8,12 +8,12 @@ use prettytable::{color, Attr, Cell, Row, Table};
#[derive(new)]
pub struct TableView {
headers: Vec<DataDescriptor>,
headers: Vec<String>,
entries: Vec<Vec<String>>,
}
impl TableView {
fn merge_descriptors(values: &[Value]) -> Vec<DataDescriptor> {
fn merge_descriptors(values: &[Value]) -> Vec<String> {
let mut ret = vec![];
for value in values {
for desc in value.data_descriptors() {
@ -30,10 +30,10 @@ impl TableView {
return None;
}
let headers = TableView::merge_descriptors(values);
let mut headers = TableView::merge_descriptors(values);
if headers.len() == 0 {
return None;
headers.push("value".to_string());
}
let mut entries = vec![];
@ -74,7 +74,7 @@ impl RenderView for TableView {
.headers
.iter()
.map(|h| {
Cell::new(h.display_header())
Cell::new(h)
.with_style(Attr::ForegroundColor(color::GREEN))
.with_style(Attr::Bold)
})

View File

@ -26,7 +26,7 @@ impl TreeView {
}
Value::Object(o) => {
for (k, v) in o.entries.iter() {
builder = builder.begin_child(k.name.display().to_string());
builder = builder.begin_child(k.clone());
Self::from_value_helper(v, builder);
builder = builder.end_child();
}
@ -49,7 +49,7 @@ impl TreeView {
for desc in descs {
let value = value.get_data(&desc);
builder = builder.begin_child(desc.name.display().to_string());
builder = builder.begin_child(desc.clone());
Self::from_value_helper(value.borrow(), &mut builder);
builder = builder.end_child();
//entries.push((desc.name.clone(), value.borrow().copy()))

View File

@ -1,5 +1,5 @@
use crate::format::RenderView;
use crate::object::{DescriptorName, Value};
use crate::object::Value;
use crate::prelude::*;
use derive_new::new;
use prettytable::format::{FormatBuilder, LinePosition, LineSeparator};
@ -29,11 +29,7 @@ impl VTableView {
for header in headers {
let mut row = vec![];
if let DescriptorName::String(s) = &header.name {
row.push(s.clone());
} else {
row.push("value".to_string());
}
row.push(header.clone());
for value in values {
row.push(value.get_data(&header).borrow().format_leaf(Some(&header)));
}