use crate::reply::clients::ClientRow;
use crate::reply::config::Config;
use crate::reply::lineages::Lineage;
use crate::reply::roles::RoleRow;
use super::parts::{clause, line, line_over, listing, quoted, things, when};
pub(super) fn roles(rows: &[RoleRow]) -> String {
let painted = rows
.iter()
.map(|row| {
line(vec![
Some(row.role.clone()),
Some(row.runs_on()),
when(row.priority, "priority"),
clause("effort", row.effort.as_deref()),
])
})
.collect();
listing("roles", painted, "this wall sets no role")
}
pub(super) fn config(config: &Config) -> String {
let settings = config
.settings
.iter()
.map(|setting| {
line(vec![
Some(format!("{}.{}", setting.entry, setting.name)),
Some(format!("= {}", setting.value)),
Some(setting.control.kind.clone()),
clause("fault:", setting.fault.as_deref()),
Some(setting.help.clone()),
])
})
.collect();
line_over(
&listing("settings", settings, "this schema found no setting"),
Some(config.text.clone()),
)
}
pub(super) fn lineages(rows: &[Lineage]) -> String {
let painted = rows
.iter()
.map(|row| {
line(vec![
Some(row.name.clone()),
Some(row.short_oid.clone()),
things(row.files.len() as u64, "file"),
])
})
.collect();
listing("lineages", painted, "this wall holds no lineage")
}
pub(super) fn clients(rows: &[ClientRow]) -> String {
let painted = rows
.iter()
.map(|row| {
line_over(
&line(vec![
Some(row.client.clone()),
when(row.present, "present"),
things(row.tools.len() as u64, "tool"),
]),
Some(
row.tools
.iter()
.map(|tool| {
line(vec![
Some(tool.name.clone()),
when(tool.subject_cwd, "(cwd)"),
quoted(&tool.description),
])
})
.collect::<Vec<String>>()
.join("\n"),
),
)
})
.collect();
listing("clients", painted, "no machine is registered here")
}