Skip to content

feat: add support for rust_http_proxy #5

feat: add support for rust_http_proxy

feat: add support for rust_http_proxy #5

Triggered via pull request September 4, 2024 08:31
Status Failure
Total duration 2m 2s
Artifacts

build-msrv.yml

on: pull_request
Matrix: buid-test-check
Fit to window
Zoom out
Zoom in

Annotations

5 errors and 50 warnings
buid-test-check (macos-latest)
Process completed with exit code 101.
buid-test-check (windows-latest)
The job was canceled because "macos-latest" failed.
buid-test-check (windows-latest)
The operation was canceled.
buid-test-check (ubuntu-latest)
The job was canceled because "macos-latest" failed.
buid-test-check (ubuntu-latest)
The operation was canceled.
transmute used without annotations: crates/shadowsocks-service/src/local/tun/tcp.rs#L172
warning: transmute used without annotations --> crates/shadowsocks-service/src/local/tun/tcp.rs:172:38 | 172 | let recv_buf = unsafe { mem::transmute::<_, &mut [u8]>(buf.unfilled_mut()) }; | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider adding missing annotations: `transmute::<&mut [std::mem::MaybeUninit<u8>], &mut [u8]>` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_transmute_annotations = note: `#[warn(clippy::missing_transmute_annotations)]` on by default
unnecessary closure used to substitute value for `Option::None`: crates/shadowsocks-service/src/local/socks/server/mod.rs#L114
warning: unnecessary closure used to substitute value for `Option::None` --> crates/shadowsocks-service/src/local/socks/server/mod.rs:114:46 | 114 | let udp_associate_addr: ServerAddr = self | ______________________________________________^ 115 | | .udp_associate_addr 116 | | .as_ref() 117 | | .or_else(|| self.udp_bind_addr.as_ref()) | |______________--------------------------------------^ | | | help: use `or(..)` instead: `or(self.udp_bind_addr.as_ref())` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations
unnecessary closure used to substitute value for `Option::None`: crates/shadowsocks-service/src/local/socks/server/mod.rs#L114
warning: unnecessary closure used to substitute value for `Option::None` --> crates/shadowsocks-service/src/local/socks/server/mod.rs:114:46 | 114 | let udp_associate_addr: ServerAddr = self | ______________________________________________^ 115 | | .udp_associate_addr 116 | | .as_ref() 117 | | .or_else(|| self.udp_bind_addr.as_ref()) 118 | | .unwrap_or_else(|| &self.client_config) | |______________-------------------------------------^ | | | help: use `unwrap_or(..)` instead: `unwrap_or(&self.client_config)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default
this `match` can be collapsed into the outer `if let`: crates/shadowsocks-service/src/local/redir/udprelay/sys/unix/linux.rs#L77
warning: this `match` can be collapsed into the outer `if let` --> crates/shadowsocks-service/src/local/redir/udprelay/sys/unix/linux.rs:77:21 | 77 | / match errno { 78 | | libc::ENOPROTOOPT => { 79 | | // SO_REUSEPORT is supported after 3.9 80 | | trace!("failed to set SO_REUSEPORT, error: {}", err); ... | 85 | | } 86 | | } | |_____________________^ | help: the outer pattern can be modified to include the inner pattern --> crates/shadowsocks-service/src/local/redir/udprelay/sys/unix/linux.rs:76:29 | 76 | if let Some(errno) = err.raw_os_error() { | ^^^^^ replace this binding 77 | match errno { 78 | libc::ENOPROTOOPT => { | ^^^^^^^^^^^^^^^^^ with this pattern = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match = note: `#[warn(clippy::collapsible_match)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L98
warning: this expression creates a reference which is immediately dereferenced by the compiler --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:98:23 | 98 | wait_response(&mut stream).await?; | ^^^^^^^^^^^ help: change this to: `stream` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
current MSRV (Minimum Supported Rust Version) is `1.74.0` but this item is stable since `1.80.0`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L50
warning: current MSRV (Minimum Supported Rust Version) is `1.74.0` but this item is stable since `1.80.0` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:50:44 | 50 | static CONNECTOR: LazyLock<TlsConnector> = LazyLock::new(|| { | ^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv = note: `#[warn(clippy::incompatible_msrv)]` on by default
casting the result of `i32::abs()` to u32: crates/shadowsocks-service/src/local/loadbalancing/server_stat.rs#L191
warning: casting the result of `i32::abs()` to u32 --> crates/shadowsocks-service/src/local/loadbalancing/server_stat.rs:191:30 | 191 | .map(|s| (*s as i32 - self.data.latency_median as i32).abs() as u32) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `(*s as i32 - self.data.latency_median as i32).unsigned_abs()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned = note: `#[warn(clippy::cast_abs_to_unsigned)]` on by default
using `clone` on type `ServerStatData` which implements the `Copy` trait: crates/shadowsocks-service/src/local/loadbalancing/server_data.rs#L69
warning: using `clone` on type `ServerStatData` which implements the `Copy` trait --> crates/shadowsocks-service/src/local/loadbalancing/server_data.rs:69:9 | 69 | self.stat_data.lock().await.data().clone() | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.stat_data.lock().await.data()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `ServerStatData` which implements the `Copy` trait: crates/shadowsocks-service/src/local/loadbalancing/server_data.rs#L56
warning: using `clone` on type `ServerStatData` which implements the `Copy` trait --> crates/shadowsocks-service/src/local/loadbalancing/server_data.rs:56:38 | 56 | (stat.push_score(score), stat.data().clone()) | ^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*stat.data()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy = note: `#[warn(clippy::clone_on_copy)]` on by default
redundant pattern matching, consider using `is_ok()`: crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs#L919
warning: redundant pattern matching, consider using `is_ok()` --> crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs:919:16 | 919 | if let Ok(..) = response.parse(&buf) { | -------^^^^^^----------------------- help: try: `if response.parse(&buf).is_ok()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching
redundant pattern matching, consider using `is_ok()`: crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs#L878
warning: redundant pattern matching, consider using `is_ok()` --> crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs:878:16 | 878 | if let Ok(..) = response.parse(&buf) { | -------^^^^^^----------------------- help: try: `if response.parse(&buf).is_ok()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching = note: `#[warn(clippy::redundant_pattern_matching)]` on by default
unused import: `AbstractDevice`: crates/shadowsocks-service/src/local/tun/mod.rs#L32
warning: unused import: `AbstractDevice` --> crates/shadowsocks-service/src/local/tun/mod.rs:32:78 | 32 | create_as_async, AsyncDevice, Configuration as TunConfiguration, AbstractDevice, Error as TunError, Layer, | ^^^^^^^^^^^^^^
unused import: `ops::Add`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L6
warning: unused import: `ops::Add` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:6:5 | 6 | ops::Add, | ^^^^^^^^
unused variable: `flow_stat`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L166
warning: unused variable: `flow_stat` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:166:13 | 166 | let flow_stat = context.flow_stat(); | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_flow_stat` | = note: `#[warn(unused_variables)]` on by default
variable does not need to be mutable: crates/shadowsocks-service/src/local/http/http_client.rs#L198
warning: variable does not need to be mutable --> crates/shadowsocks-service/src/local/http/http_client.rs:198:9 | 198 | mut req: Request<B>, | ----^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
this `else { if .. }` block can be collapsed: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L147
warning: this `else { if .. }` block can be collapsed --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:147:16 | 147 | } else { | ________________^ 148 | | if use_http_tunnel { 149 | | // todo!("http tunnel is not implemented yet"); 150 | | AutoProxyClientStream::connect_http_tunnel(context, server, addr).await ... | 153 | | } 154 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_else_if = note: `#[warn(clippy::collapsible_else_if)]` on by default help: collapse nested if block | 147 ~ } else if use_http_tunnel { 148 + // todo!("http tunnel is not implemented yet"); 149 + AutoProxyClientStream::connect_http_tunnel(context, server, addr).await 150 + } else { 151 + AutoProxyClientStream::connect_proxied_with_opts(context, server, addr, opts).await 152 + } |
unused import: `rustls::ClientConfig`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L25
warning: unused import: `rustls::ClientConfig` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:25:20 | 25 | use tokio_rustls::{rustls::ClientConfig, TlsConnector}; | ^^^^^^^^^^^^^^^^^^^^
unused imports: `AsyncBufReadExt` and `BufReader`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L24
warning: unused imports: `AsyncBufReadExt` and `BufReader` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:24:17 | 24 | use tokio::io::{AsyncBufReadExt, AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader, ReadBuf}; | ^^^^^^^^^^^^^^^ ^^^^^^^^^
unused import: `Request`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L16
warning: unused import: `Request` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:16:16 | 16 | use httparse::{Request, Response, Status}; | ^^^^^^^
unused imports: `FutureExt` and `ready`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L15
warning: unused imports: `FutureExt` and `ready` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:15:20 | 15 | use futures_util::{ready, FutureExt}; | ^^^^^ ^^^^^^^^^
unused imports: `Future` and `stream`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L14
warning: unused imports: `Future` and `stream` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:14:15 | 14 | use futures::{stream, Future}; | ^^^^^^ ^^^^^^
unused import: `arc_swap::strategy`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L12
warning: unused import: `arc_swap::strategy` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:12:5 | 12 | use arc_swap::strategy; | ^^^^^^^^^^^^^^^^^^
unused import: `self`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L7
warning: unused import: `self` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:7:11 | 7 | pin::{self, Pin}, | ^^^^
unused import: `tokio::pin`: crates/shadowsocks-service/src/local/http/http_service.rs#L16
warning: unused import: `tokio::pin` --> crates/shadowsocks-service/src/local/http/http_service.rs:16:5 | 16 | use tokio::pin; | ^^^^^^^^^^
unused import: `futures::stream`: crates/shadowsocks-service/src/local/http/http_service.rs#L6
warning: unused import: `futures::stream` --> crates/shadowsocks-service/src/local/http/http_service.rs:6:5 | 6 | use futures::stream; | ^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
transmute used without annotations: crates/shadowsocks-service/src/local/tun/tcp.rs#L172
warning: transmute used without annotations --> crates/shadowsocks-service/src/local/tun/tcp.rs:172:38 | 172 | let recv_buf = unsafe { mem::transmute::<_, &mut [u8]>(buf.unfilled_mut()) }; | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider adding missing annotations: `transmute::<&mut [std::mem::MaybeUninit<u8>], &mut [u8]>` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_transmute_annotations = note: `#[warn(clippy::missing_transmute_annotations)]` on by default
unnecessary closure used to substitute value for `Option::None`: crates/shadowsocks-service/src/local/socks/server/mod.rs#L114
warning: unnecessary closure used to substitute value for `Option::None` --> crates/shadowsocks-service/src/local/socks/server/mod.rs:114:46 | 114 | let udp_associate_addr: ServerAddr = self | ______________________________________________^ 115 | | .udp_associate_addr 116 | | .as_ref() 117 | | .or_else(|| self.udp_bind_addr.as_ref()) | |______________--------------------------------------^ | | | help: use `or(..)` instead: `or(self.udp_bind_addr.as_ref())` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations
unnecessary closure used to substitute value for `Option::None`: crates/shadowsocks-service/src/local/socks/server/mod.rs#L114
warning: unnecessary closure used to substitute value for `Option::None` --> crates/shadowsocks-service/src/local/socks/server/mod.rs:114:46 | 114 | let udp_associate_addr: ServerAddr = self | ______________________________________________^ 115 | | .udp_associate_addr 116 | | .as_ref() 117 | | .or_else(|| self.udp_bind_addr.as_ref()) 118 | | .unwrap_or_else(|| &self.client_config) | |______________-------------------------------------^ | | | help: use `unwrap_or(..)` instead: `unwrap_or(&self.client_config)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default
this `match` can be collapsed into the outer `if let`: crates/shadowsocks-service/src/local/redir/udprelay/sys/unix/macos.rs#L58
warning: this `match` can be collapsed into the outer `if let` --> crates/shadowsocks-service/src/local/redir/udprelay/sys/unix/macos.rs:58:21 | 58 | / match errno { 59 | | libc::ENOPROTOOPT => { 60 | | trace!("failed to set SO_REUSEPORT, error: {}", err); 61 | | } ... | 65 | | } 66 | | } | |_____________________^ | help: the outer pattern can be modified to include the inner pattern --> crates/shadowsocks-service/src/local/redir/udprelay/sys/unix/macos.rs:57:29 | 57 | if let Some(errno) = err.raw_os_error() { | ^^^^^ replace this binding 58 | match errno { 59 | libc::ENOPROTOOPT => { | ^^^^^^^^^^^^^^^^^ with this pattern = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match = note: `#[warn(clippy::collapsible_match)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L98
warning: this expression creates a reference which is immediately dereferenced by the compiler --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:98:23 | 98 | wait_response(&mut stream).await?; | ^^^^^^^^^^^ help: change this to: `stream` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
current MSRV (Minimum Supported Rust Version) is `1.74.0` but this item is stable since `1.80.0`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L50
warning: current MSRV (Minimum Supported Rust Version) is `1.74.0` but this item is stable since `1.80.0` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:50:44 | 50 | static CONNECTOR: LazyLock<TlsConnector> = LazyLock::new(|| { | ^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv = note: `#[warn(clippy::incompatible_msrv)]` on by default
casting the result of `i32::abs()` to u32: crates/shadowsocks-service/src/local/loadbalancing/server_stat.rs#L191
warning: casting the result of `i32::abs()` to u32 --> crates/shadowsocks-service/src/local/loadbalancing/server_stat.rs:191:30 | 191 | .map(|s| (*s as i32 - self.data.latency_median as i32).abs() as u32) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `(*s as i32 - self.data.latency_median as i32).unsigned_abs()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned = note: `#[warn(clippy::cast_abs_to_unsigned)]` on by default
using `clone` on type `ServerStatData` which implements the `Copy` trait: crates/shadowsocks-service/src/local/loadbalancing/server_data.rs#L69
warning: using `clone` on type `ServerStatData` which implements the `Copy` trait --> crates/shadowsocks-service/src/local/loadbalancing/server_data.rs:69:9 | 69 | self.stat_data.lock().await.data().clone() | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.stat_data.lock().await.data()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `ServerStatData` which implements the `Copy` trait: crates/shadowsocks-service/src/local/loadbalancing/server_data.rs#L56
warning: using `clone` on type `ServerStatData` which implements the `Copy` trait --> crates/shadowsocks-service/src/local/loadbalancing/server_data.rs:56:38 | 56 | (stat.push_score(score), stat.data().clone()) | ^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*stat.data()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy = note: `#[warn(clippy::clone_on_copy)]` on by default
redundant pattern matching, consider using `is_ok()`: crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs#L919
warning: redundant pattern matching, consider using `is_ok()` --> crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs:919:16 | 919 | if let Ok(..) = response.parse(&buf) { | -------^^^^^^----------------------- help: try: `if response.parse(&buf).is_ok()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching
redundant pattern matching, consider using `is_ok()`: crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs#L878
warning: redundant pattern matching, consider using `is_ok()` --> crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs:878:16 | 878 | if let Ok(..) = response.parse(&buf) { | -------^^^^^^----------------------- help: try: `if response.parse(&buf).is_ok()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching = note: `#[warn(clippy::redundant_pattern_matching)]` on by default
unused import: `AbstractDevice`: crates/shadowsocks-service/src/local/tun/mod.rs#L32
warning: unused import: `AbstractDevice` --> crates/shadowsocks-service/src/local/tun/mod.rs:32:78 | 32 | create_as_async, AsyncDevice, Configuration as TunConfiguration, AbstractDevice, Error as TunError, Layer, | ^^^^^^^^^^^^^^
unused import: `ops::Add`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L6
warning: unused import: `ops::Add` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:6:5 | 6 | ops::Add, | ^^^^^^^^
unused variable: `flow_stat`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L166
warning: unused variable: `flow_stat` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:166:13 | 166 | let flow_stat = context.flow_stat(); | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_flow_stat` | = note: `#[warn(unused_variables)]` on by default
variable does not need to be mutable: crates/shadowsocks-service/src/local/http/http_client.rs#L198
warning: variable does not need to be mutable --> crates/shadowsocks-service/src/local/http/http_client.rs:198:9 | 198 | mut req: Request<B>, | ----^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
this `else { if .. }` block can be collapsed: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L147
warning: this `else { if .. }` block can be collapsed --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:147:16 | 147 | } else { | ________________^ 148 | | if use_http_tunnel { 149 | | // todo!("http tunnel is not implemented yet"); 150 | | AutoProxyClientStream::connect_http_tunnel(context, server, addr).await ... | 153 | | } 154 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_else_if = note: `#[warn(clippy::collapsible_else_if)]` on by default help: collapse nested if block | 147 ~ } else if use_http_tunnel { 148 + // todo!("http tunnel is not implemented yet"); 149 + AutoProxyClientStream::connect_http_tunnel(context, server, addr).await 150 + } else { 151 + AutoProxyClientStream::connect_proxied_with_opts(context, server, addr, opts).await 152 + } |
unused import: `rustls::ClientConfig`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L25
warning: unused import: `rustls::ClientConfig` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:25:20 | 25 | use tokio_rustls::{rustls::ClientConfig, TlsConnector}; | ^^^^^^^^^^^^^^^^^^^^
unused imports: `AsyncBufReadExt` and `BufReader`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L24
warning: unused imports: `AsyncBufReadExt` and `BufReader` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:24:17 | 24 | use tokio::io::{AsyncBufReadExt, AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader, ReadBuf}; | ^^^^^^^^^^^^^^^ ^^^^^^^^^
unused import: `Request`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L16
warning: unused import: `Request` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:16:16 | 16 | use httparse::{Request, Response, Status}; | ^^^^^^^
unused imports: `FutureExt` and `ready`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L15
warning: unused imports: `FutureExt` and `ready` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:15:20 | 15 | use futures_util::{ready, FutureExt}; | ^^^^^ ^^^^^^^^^
unused imports: `Future` and `stream`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L14
warning: unused imports: `Future` and `stream` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:14:15 | 14 | use futures::{stream, Future}; | ^^^^^^ ^^^^^^
unused import: `arc_swap::strategy`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L12
warning: unused import: `arc_swap::strategy` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:12:5 | 12 | use arc_swap::strategy; | ^^^^^^^^^^^^^^^^^^
unused import: `self`: crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs#L7
warning: unused import: `self` --> crates/shadowsocks-service/src/local/net/tcp/auto_proxy_stream.rs:7:11 | 7 | pin::{self, Pin}, | ^^^^
unused import: `tokio::pin`: crates/shadowsocks-service/src/local/http/http_service.rs#L16
warning: unused import: `tokio::pin` --> crates/shadowsocks-service/src/local/http/http_service.rs:16:5 | 16 | use tokio::pin; | ^^^^^^^^^^
unused import: `futures::stream`: crates/shadowsocks-service/src/local/http/http_service.rs#L6
warning: unused import: `futures::stream` --> crates/shadowsocks-service/src/local/http/http_service.rs:6:5 | 6 | use futures::stream; | ^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default