TL;DR

Mocket は Responder トレイトの実装を使ってレスポンスボディをシリアライズする。

内容

Responder トレイト

Responder はレスポンスのヘッダなどを設定する options と、ボディを書き出す output を持つ。

pub(open) trait Responder {
  options(Self, res : HttpResponse) -> Unit
  output(Self, buf : @buffer.Buffer) -> Unit
}

次の型には最初から実装がある。

  • テキスト: String、StringView
  • JSON: Json、&ToJson
  • バイナリ: Bytes
  • HTML: Html
  • HttpResponse、HttpRequest

独自の型への実装

独自の型に Responder を実装すれば、その型をそのままハンドラから返せる。次は CSV を返す例である。

struct Csv(String)
 
impl @mocket.Responder for Csv with options(_, res) -> Unit {
  res.headers["Content-Type"] = "text/csv; charset=utf-8"
}
 
impl @mocket.Responder for Csv with output(self, buf) -> Unit {
  buf.write_bytes(@encoding/utf8.encode(self.0))
}

キーワード

関連