У самого опыта работы с растом не так много, но насколько я понимаю, ситуация получается следующая:
1. Метод
fn get_file(&self) возвращает
Box
2. Так как у возвращаемого типа
Box нет явного ограничения лайфтайма, то согласно
RFC 599, ему присваивается лайфтайм
'static
3. Но при этом имплементация трейта
File для структуры
F ограничена лайфтаймом
'a, отсюда и конфликт.
Возможное решение:
Объект, который должен шериться между другими объектами (в моём примере это
WrappedKey) заворачиваем сначала в
Box, что бы переместить его из стека в кучу, а затем в
Rc, что бы объект не умирал пока на него есть хоть одна ссылка.
Когда надо создать копию ссылки на объект (что бы пошарить этот объект), просто вызываете
clone() у
Rc.
Если объект надо шарить между разными потоками, то вместо
Rcиспользуйте
Arc(Atomic RC).