Escritor

Writer é utilizado para escrever conteúdo na Response:

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

Em comparação com o 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);
}

As principais diferenças entre eles são:

  • Propósitos distintos: Writer representa a escrita de conteúdo específico na Response, implementado por conteúdos concretos como strings, mensagens de erro, etc. Em contraste, Handler é utilizado para processar toda a requisição.
  • Writer é criado dentro de um Handler e consome a si mesmo quando a função write é chamada, tornando-a uma chamada única. Por outro lado, Handler é compartilhado entre todas as requisições.
  • Writer pode ser retornado como conteúdo no Result de um Handler.
  • Writer não inclui um parâmetro FlowCtrl, portanto não pode controlar o fluxo de execução da requisição completa.

Scribe implementa Writer, mas oferece menos capacidades em comparação com Writer:

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

A função de renderização de Scribe apenas escreve dados na Response e não pode recuperar informações do Request ou Depot durante este processo.