nushell/src/format/generic.rs
Jonathan Turner 7c794dc189 Add tree sink
2019-06-07 19:50:26 +12:00

45 lines
1.3 KiB
Rust

use crate::format::{EntriesView, ListView, RenderView, TableView, TreeView};
use crate::object::Value;
use crate::prelude::*;
use derive_new::new;
// A list is printed one line at a time with an optional separator between groups
#[derive(new)]
pub struct GenericView<'value> {
value: &'value Value,
}
impl RenderView for GenericView<'value> {
fn render_view(&self, host: &mut dyn Host) -> Result<(), ShellError> {
match self.value {
Value::Primitive(p) => Ok(host.stdout(&p.format(None))),
Value::List(l) => {
let view = TableView::from_list(l);
if let Some(view) = view {
view.render_view(host)?;
}
Ok(())
}
o @ Value::Object(_) => {
let view = EntriesView::from_value(o);
view.render_view(host)?;
Ok(())
}
b @ Value::Block(_) => {
let printed = b.format_leaf(None);
let view = EntriesView::from_value(&Value::string(&printed));
view.render_view(host)?;
Ok(())
}
Value::Error(e) => {
host.stdout(&format!("{:?}", e));
Ok(())
}
}
}
}