Tsukuyomi 0.3.0 を公開しました
すっかり忘れていたのですが、0.2.2 から大きめの変更を加えていたので覚えているうちにリリースしておきました。
スコープ機能
ルーティング周りの実装を見直し、スコープを持たせられるようにしました。 次のように使います。
let pool = DbPool::init("postgres://username:password:localhost/database1")?; let app = App::builder() .route(("/greeting", wrap_ready(greeting))) .mount("/api/v1", |scope| { // スコープ内でのみ pool の値へアクセスできる scope.set(pool); // スコープ内のルートに適用されるミドルウェア scope.modifier(JsonErrorHandler::new()); scope.route(("/posts", wrap_async(posts_handler))); // サブスコープを作れる scope.mount("/users", |scope| { ... }); }) .finish()?;
WebSocket サポート
WebSocket のエンドポイントをサポートしました。次のような感じで使います。
use tsukuyomi::contrib::websocket::start; fn websocket(input: &mut Input) -> impl Responder { start(input, None, |transport| { .... }) } let app = App::builder() .route(("/ws", wrap_ready(websocket))) .finish()?;
その他
- HTTP サーバの実装を独立したクレートとして切り出しました。
tower-service
で提供されているトレイトを使用しているので、汎用的な用途として用いることが出来ると思います。Hyper/Towerの今後の展望次第ですが、最終的にこのサーバ実装は他のもので完全に置き換えることを予定しています。