Нет, тут две проблемы:
1. Все замыкания, генераторы и футуры из асинков имеют принципиально неназываемые в стабильном расте типы, поэтому если ты хочешь вернуть из метода трейта без боксинга футуру асинковую или замыкание - то тебе придется ощутимо извращаться. В ночном расте получше, но всё равно с приключениями.
2. Отсюда идёт вторая проблема, чтобы вернуть без боксинга подобный тип из трейта, ты в трейте создаешь ассоциированный тип вроде:
trait HasIterator {
type MyIterator: Iterator<Item = i32>;
fn create_iterator(&self) -> Self::MyIterator;
}
И вопрос, а как выразить то, что у твоего типа &'a self и его итератора будет одинаковое время жизни? Т.е. что итератор зависит от времени жизни текущей ссылки на твой тип?
А никак