Schreiber

Writer wird verwendet, um Inhalte in Response zu schreiben:

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

Im Vergleich zu 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);
}

Die Hauptunterschiede zwischen ihnen sind:

  • Unterschiedliche Zwecke: Writer repräsentiert das Schreiben spezifischer Inhalte in Response, implementiert durch konkrete Inhalte wie Zeichenketten, Fehlermeldungen usw. Im Gegensatz dazu wird Handler verwendet, um die gesamte Anfrage zu verarbeiten.
  • Writer wird innerhalb eines Handler erstellt und verbraucht sich selbst, wenn die write-Funktion aufgerufen wird, was ihn zu einem einmaligen Aufruf macht. Andererseits wird Handler über alle Anfragen hinweg gemeinsam genutzt.
  • Writer kann als Inhalt im Result eines Handler zurückgegeben werden.
  • Writer enthält keinen FlowCtrl-Parameter und kann daher den Ausführungsfluss der gesamten Anfrage nicht steuern.

Scribe implementiert Writer, bietet jedoch im Vergleich zu Writer weniger Fähigkeiten:

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

Die Render-Funktion von Scribe schreibt nur Daten in Response und kann während dieses Vorgangs keine Informationen aus Request oder Depot abrufen.