diff --git a/actix-web-actors/Cargo.toml b/actix-web-actors/Cargo.toml index 61d454b55..c8ff628de 100644 --- a/actix-web-actors/Cargo.toml +++ b/actix-web-actors/Cargo.toml @@ -24,7 +24,7 @@ allowed_external_types = [ actix = { version = ">=0.12, <0.14", default-features = false } actix-codec = "0.5" actix-http = "3" -actix-web = { version = "4", default-features = false } +actix-web = { version = "4", default-features = false, features = ["ws"] } bytes = "1" bytestring = "1" diff --git a/actix-web/CHANGES.md b/actix-web/CHANGES.md index 85b9c6063..c5a51f984 100644 --- a/actix-web/CHANGES.md +++ b/actix-web/CHANGES.md @@ -4,6 +4,7 @@ - `actix_web::response::builder::HttpResponseBuilder::streaming()` now sets `Content-Type` to `application/octet-stream` if `Content-Type` does not exist. - `actix_web::response::builder::HttpResponseBuilder::streaming()` now calls `actix_web::response::builder::HttpResponseBuilder::no_chunking()` if `Content-Length` is set by user. +- Add `ws` crate feature (on-by-default) which forwards to `actix-http` and guards some of its `ResponseError` impls. ## 4.11.0 diff --git a/actix-web/Cargo.toml b/actix-web/Cargo.toml index 88b183734..e6eea5da4 100644 --- a/actix-web/Cargo.toml +++ b/actix-web/Cargo.toml @@ -67,6 +67,7 @@ default = [ "http2", "unicode", "compat", + "ws", ] # Brotli algorithm content-encoding support @@ -85,9 +86,12 @@ cookies = ["dep:cookie"] # Secure & signed cookies secure-cookies = ["cookies", "cookie/secure"] -# HTTP/2 support (including h2c). +# HTTP/2 support (including h2c) http2 = ["actix-http/http2"] +# WebSocket support +ws = ["actix-http/ws"] + # TLS via OpenSSL openssl = ["__tls", "http2", "actix-http/openssl", "actix-tls/accept", "actix-tls/openssl"] @@ -131,7 +135,7 @@ actix-service = "2" actix-tls = { version = "3.4", default-features = false, optional = true } actix-utils = "3" -actix-http = { version = "3.11", features = ["ws"] } +actix-http = "3.11" actix-router = { version = "0.5.3", default-features = false, features = ["http"] } actix-web-codegen = { version = "4.3", optional = true, default-features = false } diff --git a/actix-web/src/error/response_error.rs b/actix-web/src/error/response_error.rs index f5d8cf467..ab3ec59b4 100644 --- a/actix-web/src/error/response_error.rs +++ b/actix-web/src/error/response_error.rs @@ -7,7 +7,6 @@ use std::{ io::{self, Write as _}, }; -use actix_http::Response; use bytes::BytesMut; use crate::{ @@ -126,20 +125,24 @@ impl ResponseError for actix_http::error::PayloadError { } } -impl ResponseError for actix_http::ws::ProtocolError {} - impl ResponseError for actix_http::error::ContentTypeError { fn status_code(&self) -> StatusCode { StatusCode::BAD_REQUEST } } +#[cfg(feature = "ws")] impl ResponseError for actix_http::ws::HandshakeError { fn error_response(&self) -> HttpResponse { - Response::from(self).map_into_boxed_body().into() + actix_http::Response::from(self) + .map_into_boxed_body() + .into() } } +#[cfg(feature = "ws")] +impl ResponseError for actix_http::ws::ProtocolError {} + #[cfg(test)] mod tests { use super::*;