Skip to content

Commit b7dc13a

Browse files
committed
clean up setting state
1 parent 1fd5c8b commit b7dc13a

File tree

1 file changed

+17
-21
lines changed

1 file changed

+17
-21
lines changed

http-body-util/src/combinators/with_trailers.rs

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ pin_project! {
4343
trailers: F,
4444
prev_trailers: Option<HeaderMap>,
4545
},
46-
Trailers {
47-
trailers: Option<HeaderMap>,
48-
}
46+
Done,
4947
}
5048
}
5149

@@ -64,26 +62,26 @@ where
6462
loop {
6563
let mut this = self.as_mut().project();
6664

67-
let new_state: State<_, _> = match this.state.as_mut().project() {
65+
match this.state.as_mut().project() {
6866
StateProj::PollBody { body, trailers } => match ready!(body.poll_frame(cx)?) {
6967
Some(frame) => match frame.into_trailers() {
7068
Ok(prev_trailers) => {
7169
let trailers = trailers.take().unwrap();
72-
State::PollTrailers {
70+
this.state.set(State::PollTrailers {
7371
trailers,
7472
prev_trailers: Some(prev_trailers),
75-
}
73+
});
7674
}
7775
Err(frame) => {
7876
return Poll::Ready(Some(Ok(frame)));
7977
}
8078
},
8179
None => {
8280
let trailers = trailers.take().unwrap();
83-
State::PollTrailers {
81+
this.state.set(State::PollTrailers {
8482
trailers,
8583
prev_trailers: None,
86-
}
84+
});
8785
}
8886
},
8987
StateProj::PollTrailers {
@@ -93,39 +91,37 @@ where
9391
let trailers = ready!(trailers.poll(cx)?);
9492
match (trailers, prev_trailers.take()) {
9593
(None, None) => return Poll::Ready(None),
96-
(None, Some(trailers)) | (Some(trailers), None) => State::Trailers {
97-
trailers: Some(trailers),
98-
},
94+
(None, Some(trailers)) | (Some(trailers), None) => {
95+
this.state.set(State::Done);
96+
return Poll::Ready(Some(Ok(Frame::trailers(trailers))));
97+
}
9998
(Some(new_trailers), Some(mut prev_trailers)) => {
10099
prev_trailers.extend(new_trailers);
101-
State::Trailers {
102-
trailers: Some(prev_trailers),
103-
}
100+
this.state.set(State::Done);
101+
return Poll::Ready(Some(Ok(Frame::trailers(prev_trailers))));
104102
}
105103
}
106104
}
107-
StateProj::Trailers { trailers } => {
108-
return Poll::Ready(trailers.take().map(Frame::trailers).map(Ok));
105+
StateProj::Done => {
106+
return Poll::Ready(None);
109107
}
110-
};
111-
112-
this.state.set(new_state);
108+
}
113109
}
114110
}
115111

116112
#[inline]
117113
fn is_end_stream(&self) -> bool {
118114
match &self.state {
119115
State::PollBody { body, .. } => body.is_end_stream(),
120-
State::PollTrailers { .. } | State::Trailers { .. } => true,
116+
State::PollTrailers { .. } | State::Done => true,
121117
}
122118
}
123119

124120
#[inline]
125121
fn size_hint(&self) -> http_body::SizeHint {
126122
match &self.state {
127123
State::PollBody { body, .. } => body.size_hint(),
128-
State::PollTrailers { .. } | State::Trailers { .. } => Default::default(),
124+
State::PollTrailers { .. } | State::Done => Default::default(),
129125
}
130126
}
131127
}

0 commit comments

Comments
 (0)