I'm using the rust-sdl2 crate to paint a buffer on a window screen, so I decided to abstract the SDL calls. I tried to follow this example from the rust-sdl2 repo and my first thought was to create something like this:
pub struct SDLDisplay {
    sdl_context: Sdl,
    video_subsystem: VideoSubsystem,
    canvas: WindowCanvas,
    texture_creator: TextureCreator<sdl2::video::WindowContext>,
    texture: Texture,
}
impl SDLDisplay {
    pub fn new() -> Result<SDLDisplay, String> {
        let sdl_context = sdl2::init()?;
        let video_subsystem = sdl_context.video()?;
        let window = video_subsystem
            .window("Test App", 256, 240)
            .position_centered()
            .build()
            .map_err(|e| e.to_string())?;
        let canvas = window.into_canvas().build().map_err(|e| e.to_string())?;
        let texture_creator = canvas.texture_creator();
        let texture = texture_creator
            .create_texture_streaming(Some(ARGB8888), 256, 240)
            .map_err(|e| e.to_string())?;
        Ok(SDLDisplay {
            sdl_context,
            video_subsystem,
            canvas,
            texture_creator,
            texture,
        })
    }
}
The first issue was that Texture needs a lifetime parameter; I solved that by spreading an <'a> across the code base... It stopped complaining about that, but now I have the following:
error[E0515]: cannot return value referencing local variable `texture_creator`
   |
  --> src/sdl_display.rs:44:9
40 |           let texture = texture_creator
   |                         --------------- `texture_creator` is borrowed here
   |
...
40 |           let texture = texture_creator
44 | /         Ok(SDLDisplay {
   |                         --------------- `texture_creator` is borrowed here
45 | |             sdl_context,
...
46 | |             video_subsystem,
44 | /         Ok(SDLDisplay {
47 | |             canvas,
45 | |             sdl_context,
48 | |             texture_creator,
46 | |             video_subsystem,
49 | |             texture,
47 | |             canvas,
48 | |             texture_creator,
49 | |             texture,
50 | |         })
   | |__________^ returns a value referencing data owned by the current function
50 | |         })
   | |__________^ returns a value referencing data owned by the current function
It's telling me I can't move texture_creator to the new struct because it was borrowed for creating the texture, but if I don't have the TextureCreator instance inside the struct, it complains that Texture must not outlive TextureCreator.
I'm completely lost here. Is there a way to actually store a texture inside a struct using rust-sdl2?
 
    