use geoffrey_models::models::locations::Location; use geoffrey_models::models::player::Player; use geoffrey_models::models::Portal; pub fn display_owners(owners: &[Player], 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), ) }