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