Writer

Writer est utilisé pour écrire du contenu dans Response :

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

Comparé à 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);
}

Les principales différences entre eux sont :

  • Objectifs différents : Writer représente l'écriture de contenu spécifique dans Response, implémentée par des contenus concrets tels que des chaînes de caractères, des messages d'erreur, etc. En revanche, Handler est utilisé pour traiter l'intégralité de la requête.
  • Writer est créé au sein d'un Handler et se consomme lui-même lorsque la fonction write est appelée, ce qui en fait un appel unique. En revanche, Handler est partagé entre toutes les requêtes.
  • Writer peut être retourné en tant que contenu dans le Result d'un Handler.
  • Writer ne comprend pas de paramètre FlowCtrl, il ne peut donc pas contrôler le flux d'exécution de la requête entière.

Scribe implémente Writer mais offre moins de capacités comparé à Writer :

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

La fonction de rendu de Scribe ne fait qu'écrire des données dans Response et ne peut pas récupérer d'informations depuis Request ou Depot pendant ce processus.