@@ -43,9 +43,7 @@ pin_project! {
43
43
trailers: F ,
44
44
prev_trailers: Option <HeaderMap >,
45
45
} ,
46
- Trailers {
47
- trailers: Option <HeaderMap >,
48
- }
46
+ Done ,
49
47
}
50
48
}
51
49
@@ -64,26 +62,26 @@ where
64
62
loop {
65
63
let mut this = self . as_mut ( ) . project ( ) ;
66
64
67
- let new_state : State < _ , _ > = match this. state . as_mut ( ) . project ( ) {
65
+ match this. state . as_mut ( ) . project ( ) {
68
66
StateProj :: PollBody { body, trailers } => match ready ! ( body. poll_frame( cx) ?) {
69
67
Some ( frame) => match frame. into_trailers ( ) {
70
68
Ok ( prev_trailers) => {
71
69
let trailers = trailers. take ( ) . unwrap ( ) ;
72
- State :: PollTrailers {
70
+ this . state . set ( State :: PollTrailers {
73
71
trailers,
74
72
prev_trailers : Some ( prev_trailers) ,
75
- }
73
+ } ) ;
76
74
}
77
75
Err ( frame) => {
78
76
return Poll :: Ready ( Some ( Ok ( frame) ) ) ;
79
77
}
80
78
} ,
81
79
None => {
82
80
let trailers = trailers. take ( ) . unwrap ( ) ;
83
- State :: PollTrailers {
81
+ this . state . set ( State :: PollTrailers {
84
82
trailers,
85
83
prev_trailers : None ,
86
- }
84
+ } ) ;
87
85
}
88
86
} ,
89
87
StateProj :: PollTrailers {
@@ -93,39 +91,37 @@ where
93
91
let trailers = ready ! ( trailers. poll( cx) ?) ;
94
92
match ( trailers, prev_trailers. take ( ) ) {
95
93
( 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
+ }
99
98
( Some ( new_trailers) , Some ( mut prev_trailers) ) => {
100
99
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) ) ) ) ;
104
102
}
105
103
}
106
104
}
107
- StateProj :: Trailers { trailers } => {
108
- return Poll :: Ready ( trailers . take ( ) . map ( Frame :: trailers ) . map ( Ok ) ) ;
105
+ StateProj :: Done => {
106
+ return Poll :: Ready ( None ) ;
109
107
}
110
- } ;
111
-
112
- this. state . set ( new_state) ;
108
+ }
113
109
}
114
110
}
115
111
116
112
#[ inline]
117
113
fn is_end_stream ( & self ) -> bool {
118
114
match & self . state {
119
115
State :: PollBody { body, .. } => body. is_end_stream ( ) ,
120
- State :: PollTrailers { .. } | State :: Trailers { .. } => true ,
116
+ State :: PollTrailers { .. } | State :: Done => true ,
121
117
}
122
118
}
123
119
124
120
#[ inline]
125
121
fn size_hint ( & self ) -> http_body:: SizeHint {
126
122
match & self . state {
127
123
State :: PollBody { body, .. } => body. size_hint ( ) ,
128
- State :: PollTrailers { .. } | State :: Trailers { .. } => Default :: default ( ) ,
124
+ State :: PollTrailers { .. } | State :: Done => Default :: default ( ) ,
129
125
}
130
126
}
131
127
}
0 commit comments