Skip to content

Commit

Permalink
refactor(body): remove lint config to allow unused code
Browse files Browse the repository at this point in the history
  • Loading branch information
tottoto committed Dec 13, 2023
1 parent 883cb5a commit ef5b806
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 2 deletions.
39 changes: 37 additions & 2 deletions src/body/incoming.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
use std::fmt;
#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};

use bytes::Bytes;
use futures_channel::mpsc;
use futures_channel::oneshot;
#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
use futures_util::{stream::FusedStream, Stream}; // for mpsc::Receiver
use http::HeaderMap;
use http_body::{Body, Frame, SizeHint};

#[cfg(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
))]
use super::DecodedLength;
use crate::common::watch;
#[cfg(all(feature = "http2", any(feature = "client", feature = "server")))]
Expand Down Expand Up @@ -39,8 +45,8 @@ pub struct Incoming {
}

enum Kind {
#[allow(dead_code)]
Empty,
#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
Chan {
content_length: DecodedLength,
want_tx: watch::Sender,
Expand Down Expand Up @@ -86,11 +92,12 @@ impl Incoming {
///
/// Useful when wanting to stream chunks from another thread.
#[inline]
#[allow(unused)]
#[cfg(test)]
pub(crate) fn channel() -> (Sender, Incoming) {
Self::new_channel(DecodedLength::CHUNKED, /*wanter =*/ false)
}

#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
pub(crate) fn new_channel(content_length: DecodedLength, wanter: bool) -> (Sender, Incoming) {
let (data_tx, data_rx) = mpsc::channel(0);
let (trailers_tx, trailers_rx) = oneshot::channel();
Expand Down Expand Up @@ -171,11 +178,26 @@ impl Body for Incoming {
type Error = crate::Error;

fn poll_frame(
#[cfg_attr(
not(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
)),
allow(unused_mut)
)]
mut self: Pin<&mut Self>,
#[cfg_attr(
not(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
)),
allow(unused_variables)
)]
cx: &mut Context<'_>,
) -> Poll<Option<Result<Frame<Self::Data>, Self::Error>>> {
match self.kind {
Kind::Empty => Poll::Ready(None),
#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
Kind::Chan {
content_length: ref mut len,
ref mut data_rx,
Expand Down Expand Up @@ -247,6 +269,7 @@ impl Body for Incoming {
fn is_end_stream(&self) -> bool {
match self.kind {
Kind::Empty => true,
#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
Kind::Chan { content_length, .. } => content_length == DecodedLength::ZERO,
#[cfg(all(feature = "http2", any(feature = "client", feature = "server")))]
Kind::H2 { recv: ref h2, .. } => h2.is_end_stream(),
Expand All @@ -256,6 +279,10 @@ impl Body for Incoming {
}

fn size_hint(&self) -> SizeHint {
#[cfg(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
))]
macro_rules! opt_len {
($content_length:expr) => {{
let mut hint = SizeHint::default();
Expand All @@ -270,6 +297,7 @@ impl Body for Incoming {

match self.kind {
Kind::Empty => SizeHint::with_exact(0),
#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
Kind::Chan { content_length, .. } => opt_len!(content_length),
#[cfg(all(feature = "http2", any(feature = "client", feature = "server")))]
Kind::H2 { content_length, .. } => opt_len!(content_length),
Expand All @@ -289,6 +317,13 @@ impl fmt::Debug for Incoming {
let mut builder = f.debug_tuple("Body");
match self.kind {
Kind::Empty => builder.field(&Empty),
#[cfg(any(
all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
),
feature = "ffi"
))]
_ => builder.field(&Streaming),
};

Expand Down
8 changes: 8 additions & 0 deletions src/body/length.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ impl DecodedLength {
}

/// Converts to an Option<u64> representing a Known or Unknown length.
#[cfg(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
))]
pub(crate) fn into_opt(self) -> Option<u64> {
match self {
DecodedLength::CHUNKED | DecodedLength::CLOSE_DELIMITED => None,
Expand All @@ -58,6 +62,10 @@ impl DecodedLength {
}
}

#[cfg(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
))]
pub(crate) fn sub_if(&mut self, amt: u64) {
match *self {
DecodedLength::CHUNKED | DecodedLength::CLOSE_DELIMITED => (),
Expand Down
4 changes: 4 additions & 0 deletions src/body/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ pub use self::incoming::Incoming;

#[cfg(all(any(feature = "client", feature = "server"), feature = "http1"))]
pub(crate) use self::incoming::Sender;
#[cfg(all(
any(feature = "http1", feature = "http2"),
any(feature = "client", feature = "server")
))]
pub(crate) use self::length::DecodedLength;

mod incoming;
Expand Down
1 change: 1 addition & 0 deletions src/common/watch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type Value = usize;

pub(crate) const CLOSED: usize = 0;

#[cfg(all(feature = "http1", any(feature = "client", feature = "server")))]
pub(crate) fn channel(initial: Value) -> (Sender, Receiver) {
debug_assert!(
initial != CLOSED,
Expand Down

0 comments on commit ef5b806

Please sign in to comment.