¿Cómo devuelvo una instancia de un rasgo de un método?

Estoy tratando de crear una función que devuelva una instancia de laShader rasgo. Aquí está mi código drásticamente simplificado:

trait Shader {}

struct MyShader;
impl Shader for MyShader {}

struct GraphicsContext;

impl GraphicsContext {
    fn create_shader(&self) -> Shader {
        let shader = MyShader;
        shader
    }
}

fn main() {}

Sin embargo, recibo el siguiente error:

error[E0277]: the trait bound `Shader + 'static: std::marker::Sized` is not satisfied
  --> src/main.rs:10:32
   |
10 |     fn create_shader(&self) -> Shader {
   |                                ^^^^^^ `Shader + 'static` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `Shader + 'static`
   = note: the return type of a function must have a statically known size

Esto tiene sentido ya que el compilador no conoce el tamaño del rasgo, pero en ninguna parte puedo encontrar la forma recomendada de solucionarlo. Pasando una referencia con& no funcionaría hasta donde yo sé porque la referencia sobreviviría a la vida de su creador.

Quizás necesito usarBox<T>?

Respuestas a la pregunta(3)

Su respuesta a la pregunta