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.

Другие вопросы по тегам