crosspostato da: https://lemmy.world/post/1916287
Hi everybody, I’m new to Rust.
So, I have a struct
Panel
which contains a datawidget
which implements the traitWidget
I have to implement a function forPanel
that uses another function that requires a type that implementsWidget
.I tried
Box<T>
,Rc<T>
,Box<dyn Widget
,&T
, but nothing, always compiler errors.How can I fix this?
Use
self.widget
?Maybe show some code of what you’re trying to do.
Yes, obviously, but there are de-referincing/borrwowing/trait problem.
If you want to check the Trait: https://docs.rs/ratatui/latest/ratatui/widgets/trait.Widget.html
If you want to check what function do I need to run: https://docs.rs/ratatui/latest/ratatui/terminal/struct.Frame.html#method.render_widget
So the struct is something like
struct Panel<T: Widget> { data: T }
(tried also with Box, Rc, &mut T and Box<dyn Widget>I need to implement a method for Panel which simply uses the function linked above. (so just asks for a Frame, the Rect type is generated by my other function)
That function takes ownership of the Widget, there’s no borrowing here. Maybe that’s the problem, that you’re passing a reference instead of the actual object?
So, if you have a Panel containing the Widget, the function you’re calling
render_widget
in has to takeself
, not&self
or&mut self
.Alternatively, you can use
data: Option<T>
in Panel, let the function take&mut self
and then useself.data.take()
to move it out of self.I checked the code and noticed that I wrote
&self
as the parameter 🤦🏻Now everything works. Thanks man
Showing the code and the errors compiler gives to you would help a bunch.
Seems like
data: T
ordata: &'a mut T
should work for you. Your function should be acceptingmut self
or&mut self
.