use std::path::Path;
use super::Row;
use crate::boundary::dispatch::Deps;
pub(super) fn rows(deps: &Deps, name: &str, path: &Path) -> Vec<Row> {
vec![wall(deps, name, path), clients(deps, name)]
}
fn wall(deps: &Deps, name: &str, path: &Path) -> Row {
match crate::boundary::dispatch::signin_gate(deps, path, None) {
Ok(()) => Row::ok(
"wall",
format!("{name}'s wall holds a credential a role can use"),
),
Err(refusal) => Row::bad(
"wall",
format!("a conversation started in {name} would reach no model"),
refusal,
),
}
}
fn clients(deps: &Deps, name: &str) -> Row {
let rows = crate::registry::roster::roster(&deps.state_root, &deps.caller.presence, name);
let present = rows.iter().filter(|row| row.present).count();
Row::ok(
"clients",
format!("{} registered, {present} connected now", rows.len()),
)
}