use geoffrey_models::models::locations::Location; use geoffrey_models::models::player::Player; use geoffrey_models::models::Portal; pub fn display_owners(owners: Vec, limit: usize) -> String { let mut plural = ""; let mut ellipses = ""; if owners.len() > 1 { plural = "s" } let range = if owners.len() > limit { ellipses = "..."; limit } else { owners.len() }; format!( "Owner{}: {}{}", plural, owners[0..range] .iter() .map(|owner| owner.name.clone()) .collect::>() .join(", "), ellipses ) } pub fn display_portal(portal: Portal) -> String { format!("Portal: {} {} (x={}, z={})", portal.direction(), portal.tunnel_addr(), portal.x, portal.z) } pub fn display_loc(loc: Location) -> String { let portal_str = match loc.portal { None => "".to_string(), Some(p) => format!("{}, ", display_portal(p)) }; format!( "**{}**, {}, {}{}", loc.name, loc.position, portal_str, display_owners(loc.owners, 3), ) }