nushell/src/format/generic.rs
2019-09-06 04:23:42 +12:00

46 lines
1.2 KiB
Rust

use crate::data::Value;
use crate::format::{EntriesView, RenderView, TableView};
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<'_> {
fn render_view(&self, host: &mut dyn Host) -> Result<(), ShellError> {
match self.value {
Value::Primitive(p) => Ok(host.stdout(&p.format(None))),
Value::Table(l) => {
let view = TableView::from_list(l);
if let Some(view) = view {
view.render_view(host)?;
}
Ok(())
}
o @ Value::Row(_) => {
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::Binary(_) => {
host.stdout("<Binary>");
Ok(())
}
}
}
}