mirror of
https://git.proxmox.com/git/proxmox
synced 2025-05-29 22:58:59 +00:00
proxmox/src/api/cli/text_table.rs - format_object: use column_config header
Also right_align Value column if all properthies are right_aligned.
This commit is contained in:
parent
43fd868a6d
commit
875f00bb85
@ -276,6 +276,28 @@ impl TableFormatOptions {
|
||||
self.column_config.push(column_config);
|
||||
self
|
||||
}
|
||||
|
||||
fn lookup_column_info(&self, column_name: &str) -> (String, Option<bool>, Option<RenderFunction>) {
|
||||
|
||||
let mut renderer = None;
|
||||
|
||||
let header;
|
||||
let mut right_align = None;
|
||||
|
||||
if let Some(column_config) = self.column_config.iter().find(|v| v.name == *column_name) {
|
||||
renderer = column_config.renderer;
|
||||
right_align = column_config.right_align;
|
||||
if let Some(ref h) = column_config.header {
|
||||
header = h.to_owned();
|
||||
} else {
|
||||
header = column_name.to_string();
|
||||
}
|
||||
} else {
|
||||
header = column_name.to_string();
|
||||
}
|
||||
|
||||
(header, right_align, renderer)
|
||||
}
|
||||
}
|
||||
|
||||
struct TableCell {
|
||||
@ -381,28 +403,16 @@ fn format_table<W: Write>(
|
||||
None => bail!("property {} does not exist in schema.", name),
|
||||
};
|
||||
|
||||
let mut right_align = match prop_schema {
|
||||
let is_numeric = match prop_schema {
|
||||
Schema::Integer(_) => true,
|
||||
Schema::Number(_) => true,
|
||||
Schema::Boolean(_) => true,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
let mut renderer = None;
|
||||
let (header, right_align, renderer) = options.lookup_column_info(name);
|
||||
|
||||
let header;
|
||||
|
||||
if let Some(column_config) = options.column_config.iter().find(|v| v.name == *name) {
|
||||
renderer = column_config.renderer;
|
||||
right_align = column_config.right_align.unwrap_or(right_align);
|
||||
if let Some(ref h) = column_config.header {
|
||||
header = h.to_owned();
|
||||
} else {
|
||||
header = name.to_string();
|
||||
}
|
||||
} else {
|
||||
header = name.to_string();
|
||||
}
|
||||
let right_align = right_align.unwrap_or(is_numeric);
|
||||
|
||||
let mut max_width = header.chars().count();
|
||||
|
||||
@ -549,21 +559,31 @@ fn format_object<W: Write>(
|
||||
let mut name_cells = Vec::new();
|
||||
let mut value_cells = Vec::new();
|
||||
|
||||
let mut all_right_aligned = true;
|
||||
|
||||
for name in properties_to_print.iter() {
|
||||
let (_optional, prop_schema) = match schema.lookup(name) {
|
||||
Some(tup) => tup,
|
||||
None => bail!("property {} does not exist in schema.", name),
|
||||
};
|
||||
|
||||
let mut renderer = None;
|
||||
if let Some(column_config) = options.column_config.iter().find(|v| v.name == *name) {
|
||||
renderer = column_config.renderer;
|
||||
}
|
||||
let is_numeric = match prop_schema {
|
||||
Schema::Integer(_) => true,
|
||||
Schema::Number(_) => true,
|
||||
Schema::Boolean(_) => true,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
let name_width = name.chars().count();
|
||||
if name_width > max_name_width { max_name_width = name_width; }
|
||||
let (header, right_align, renderer) = options.lookup_column_info(name);
|
||||
|
||||
name_cells.push(TableCell { lines: vec![ name.to_string() ] });
|
||||
let right_align = right_align.unwrap_or(is_numeric);
|
||||
|
||||
if !right_align { all_right_aligned = false; }
|
||||
|
||||
let header_width = header.chars().count();
|
||||
if header_width > max_name_width { max_name_width = header_width; }
|
||||
|
||||
name_cells.push(TableCell { lines: vec![ header ] });
|
||||
|
||||
let result = if let Some(renderer) = renderer {
|
||||
(renderer)(&data[name], &data)
|
||||
@ -586,7 +606,7 @@ fn format_object<W: Write>(
|
||||
}
|
||||
|
||||
let name_column = TableColumn { cells: name_cells, width: max_name_width, right_align: false };
|
||||
let value_column = TableColumn { cells: value_cells, width: max_value_width, right_align: false };
|
||||
let value_column = TableColumn { cells: value_cells, width: max_value_width, right_align: all_right_aligned };
|
||||
|
||||
let mut tabledata: Vec<TableColumn> = Vec::new();
|
||||
tabledata.push(name_column);
|
||||
|
Loading…
Reference in New Issue
Block a user