mirror of
https://github.com/nushell/nushell.git
synced 2025-05-11 21:44:31 +02:00
49 lines
1.5 KiB
Rust
49 lines
1.5 KiB
Rust
use crate::data::value::format_leaf;
|
|
use crate::format::{EntriesView, RenderView, TableView};
|
|
use crate::prelude::*;
|
|
use derive_new::new;
|
|
use nu_errors::ShellError;
|
|
use nu_protocol::{format_primitive, UntaggedValue, Value};
|
|
|
|
// 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> {
|
|
let tag = &self.value.tag;
|
|
match &self.value.value {
|
|
UntaggedValue::Primitive(p) => {
|
|
host.stdout(&format_primitive(p, None));
|
|
Ok(())
|
|
}
|
|
UntaggedValue::Table(l) => {
|
|
let view = TableView::from_list(l, 0);
|
|
|
|
if let Some(view) = view {
|
|
view.render_view(host)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
o @ UntaggedValue::Row(_) => {
|
|
let view = EntriesView::from_value(&o.clone().into_value(tag));
|
|
view.render_view(host)?;
|
|
Ok(())
|
|
}
|
|
|
|
b @ UntaggedValue::Block(_) => {
|
|
let printed = format_leaf(b).plain_string(host.width());
|
|
let view = EntriesView::from_value(&UntaggedValue::string(printed).into_value(tag));
|
|
view.render_view(host)?;
|
|
Ok(())
|
|
}
|
|
|
|
UntaggedValue::Error(e) => Err(e.clone()),
|
|
}
|
|
}
|
|
}
|