Escritor

Writer se utiliza para escribir contenido en Response:

#[async_trait]
pub trait Writer {
    async fn write(mut self, req: &mut Request, depot: &mut Depot, res: &mut Response);
}

Comparado con Handler:

#[async_trait]
pub trait Handler: Send + Sync + 'static {
    async fn handle(&self, req: &mut Request, depot: &mut Depot, res: &mut Response, ctrl: &mut FlowCtrl);
}

Las principales diferencias entre ellos son:

  • Propósitos diferentes: Writer representa la escritura de contenido específico en Response, implementado por contenido concreto como cadenas de texto, mensajes de error, etc. En contraste, Handler se utiliza para procesar toda la solicitud.
  • Writer se crea dentro de un Handler y se consume a sí mismo cuando se llama a la función write, lo que lo convierte en una llamada única. Por otro lado, Handler se comparte entre todas las solicitudes.
  • Writer puede devolverse como contenido en el Result de un Handler.
  • Writer no incluye un parámetro FlowCtrl, por lo que no puede controlar el flujo de ejecución de toda la solicitud.

Scribe implementa Writer pero ofrece menos capacidades en comparación con Writer:

pub trait Scribe {
    fn render(self, res: &mut Response);
}

La función de renderizado de Scribe solo escribe datos en Response y no puede recuperar información de Request o Depot durante este proceso.