pub struct VirtualTapInterface {
mtu: usize,
packetsFromOutside: VecDeque<CBuffer>,
packetsFromInside: VecDeque<CBuffer>
}
I'm implementing a trait for VirtualTapInterface
. The receive
function of this trait should create a TxToken
struct, where the lower
property must be an Rc<RefCell<VirtualTapInterface>>
containing the current VirtualTapInterface
, that is self
impl<'a> Device<'a> for VirtualTapInterface {
type TxToken = TxToken;
fn receive(&'a mut self) -> Option<(Self::RxToken, Self::TxToken)> {
let tx = TxToken { lower: Rc::new(RefCell::new(*self))};
I tried this but I get that
cannot move out of
*self
which is behind a mutable referencemove occurs because
*self
has type
phy::virtual_tun::VirtualTapInterface
, which does not implement the
Copy
traitrustc(E0507)
How is it possible to create a Rc<RefCell<>>
of a self mutable reference?
The best idea I has was to, instead of having VirtualTapInterface
the way it is, I use this instead:
pub struct VirtualTapInterface {
mtu: usize,
packetsFromOutside: Rc<RefCell<VecDeque<CBuffer>>>,
packetsFromInside:Rc<RefCell<VecDeque<CBuffer>>>
}
this way I can clone the object like this:
let tx = TxToken { lower: Rc::new(RefCell::new(self.clone()))};
and end up with the same VecDeque
s as in self
, since they're just references.
Anyone have a better idea? I cannot modify the trait, so I need it to receive a mut &