use funcmap::FuncMap;
#[derive(FuncMap, Debug)]
struct Group<T> {
name: T,
members: Vec<Member<T>>,
}
#[derive(FuncMap, Debug)]
struct Member<T> {
name: T,
}
fn main() {
println!("{:?}", load_group());
}
fn load_group() -> Group<String> {
let buffer = String::from("Example Group:Member 1,Member 2");
let group = parse_group(&buffer);
group.func_map(ToOwned::to_owned)
}
fn parse_group(input: &str) -> Group<&str> {
let [group_name, member_names]: [&str; 2] =
input.split(':').collect::<Vec<_>>().try_into().unwrap();
let members = member_names
.split(',')
.map(|name| Member { name })
.collect();
Group {
name: group_name,
members,
}
}