Actix веб-сокеты с AppState
Я пытаюсь объединить примеры Actix для Diesel и WebSockets. После добавления WebSockets один, он не имеет AppState
на месте.
Я не могу заставить это работать, даже после просмотра и сравнения с другим кодом (были различия в версиях, но после исправления их результат был той же ошибкой).
Вот мой последний (неудачный) коммит, описывающий все, что я получил. Репо можно проверить и запустить.
$ rustup default nightly
$ cargo check
Checking rust-diesel v0.1.0 (~/pansen/rust_diesel)
error[E0271]: type mismatch resolving `<handlers::ws::MyWebSocket as actix::Actor>::Context == actix_web::ws::WebsocketContext<handlers::ws::MyWebSocket, AppState>`
--> src/main.rs:63:51
|
63 | r.method(http::Method::GET).f(|r| ws::start(r, handlers::ws::MyWebSocket::new())),
| ^^^^^^^^^ expected (), found struct `AppState`
|
= note: expected type `actix_web::ws::WebsocketContext<_, ()>`
found type `actix_web::ws::WebsocketContext<_, AppState>`
= note: required by `actix_web::ws::start`
1 ответ
Вам нужно State
экстрактор. Затем магазин State<AppState>
в вашем актере WebSocket.