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 différences principales sont :

  • Leur utilité diffère : Writer représente l'écriture de contenu spécifique dans Response, implémenté par des contenus concrets comme des chaînes de caractères, des messages d'erreur, etc. Tandis que Handler sert à traiter l'intégralité de la requête.
  • Writer est créé dans Handler et se consomme lors de l'appel à la fonction write, c'est un appel unique. Alors que Handler est partagé entre toutes les requêtes.
  • Writer peut être retourné comme contenu dans le Result d'un Handler.
  • Writer ne contient pas de paramètre FlowCtrl et ne peut donc pas contrôler le déroulement de la requête.

Scribe implémente Writer, mais avec des fonctionnalités encore plus limitées :

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

La fonction de rendu de Scribe se contente d'écrire des données dans Response, sans possibilité d'obtenir des informations depuis Request ou Depot.