use crate::types::Keyword; use crate::types::Object; use crate::types::PlainList; pub struct AffiliatedKeyword<'s> { name: &'s str, } pub enum AffiliatedKeywordValue<'s> { SingleString(&'s str), ListOfStrings(Vec<&'s str>), ListOfObjects(Vec>), } pub trait GetAffiliatedKeywords<'s> { type ItemIterator: Iterator>; fn get_affiliated_keywords<'r: 's>(&'r self) -> Self::ItemIterator; } pub trait HandleAffiliatedKeywords<'s> { fn get_stuff(&self) -> &'s str; } impl<'s> GetAffiliatedKeywords<'s> for PlainList<'s> { type ItemIterator = std::slice::Iter<'s, Keyword<'s>>; fn get_affiliated_keywords<'r: 's>(&'r self) -> Self::ItemIterator { self.affiliated_keywords.iter() } } impl<'s, I: GetAffiliatedKeywords<'s>> HandleAffiliatedKeywords<'s> for I { fn get_stuff(&self) -> &'s str { self.get_affiliated_keywords().count(); todo!() } }