Writer

Writer viene utilizzato per scrivere contenuti nella Response:

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

Rispetto a 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);
}

Le differenze principali sono:

  • Scopo diverso: Writer rappresenta la scrittura di contenuti specifici nella Response, implementato da contenuti concreti come stringhe, messaggi di errore, ecc. Mentre Handler è utilizzato per gestire l'intera richiesta.
  • Writer viene creato all'interno di Handler e si consuma quando viene chiamata la funzione write, essendo un utilizzo monouso. Al contrario, Handler è condiviso tra tutte le richieste.
  • Writer può essere restituito come contenuto del Result di un Handler.
  • Writer non ha il parametro FlowCtrl, quindi non può controllare il flusso di esecuzione della richiesta.

Scribe implementa Writer, ma con funzionalità ancora più limitate:

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

La funzione di rendering di Scribe si limita a scrivere dati nella Response, senza poter accedere a informazioni da Request o Depot.