I have a writer which takes slice and returns a slice that it wrote
struct Writer<'data> {
buffer: &'data mut [u8],
}
impl<'data> Writer<'data> {
fn write(&mut self) -> &[u8] {
&self.buffer[..]
}
}
fn foo(buf: &mut [u8]) -> &[u8] {
let mut writer = Writer { buffer: buf };
writer.write()
}
for this i get an error saying
error[E0515]: cannot return reference to local variable `writer`
--> src/main.rs:13:5
|
13 | writer.write()
| ^^^^^^^^^^^^^^ returns a reference to data owned by the current function
since data has separate lifetime than buf, i tried to separate it as
struct Writer<'data> {
buffer: &'data mut [u8],
}
impl<'data, 'me> Writer<'data>
where
'data: 'me,
{
fn write(&'me mut self) -> &'data [u8] {
&self.buffer[..]
}
}
fn foo(buf: &mut [u8]) -> &[u8] {
let mut writer = Writer { buffer: buf };
writer.write()
}
but now getting
|
6 | impl<'data, 'me> Writer<'data>
| ----- --- lifetime `'me` defined here
| |
| lifetime `'data` defined here
...
11 | &self.buffer[..]
| ^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'data` but it is returning data with lifetime `'me`
|
= help: consider adding the following bound: `'me: 'data`
i tried inverting the bound as 'me: 'data
but i get
error[E0515]: cannot return reference to local variable `writer`
--> src/main.rs:17:5
|
17 | writer.write()
| ^^^^^^^^^^^^^^ returns a reference to data owned by the current function