refactor(http): Remove new_state and use nested match for http1 in connection state update.
This commit is contained in:
@@ -672,14 +672,14 @@ impl<H: MessageHandler<T>, T: Transport> State<H, T> {
|
|||||||
fn update<F, K>(&mut self, next: Next, factory: &F) where F: MessageHandlerFactory<K, T>, K: Key {
|
fn update<F, K>(&mut self, next: Next, factory: &F) where F: MessageHandlerFactory<K, T>, K: Key {
|
||||||
let timeout = next.timeout;
|
let timeout = next.timeout;
|
||||||
let state = mem::replace(self, State::Closed);
|
let state = mem::replace(self, State::Closed);
|
||||||
let new_state = match (state, next.interest) {
|
match (state, next.interest) {
|
||||||
(_, Next_::Remove) => State::Closed,
|
(_, Next_::Remove) | (State::Closed, _) => return, // Keep State::Closed.
|
||||||
(State::Closed, _) => State::Closed,
|
(State::Init { .. }, e) =>
|
||||||
(State::Init { timeout, .. }, e) => State::Init {
|
{ mem::replace(self, State::Init { interest: e, timeout: timeout} ); },
|
||||||
interest: e,
|
(State::Http1(mut http1), next_) => {
|
||||||
timeout: timeout,
|
match next_ {
|
||||||
},
|
Next_::Remove => unreachable!(), // Covered in (_, Next_::Remove) case above.
|
||||||
(State::Http1(http1), Next_::End) => {
|
Next_::End => {
|
||||||
let reading = match http1.reading {
|
let reading = match http1.reading {
|
||||||
Reading::Body(ref decoder) |
|
Reading::Body(ref decoder) |
|
||||||
Reading::Wait(ref decoder) if decoder.is_eof() => {
|
Reading::Wait(ref decoder) if decoder.is_eof() => {
|
||||||
@@ -735,27 +735,25 @@ impl<H: MessageHandler<T>, T: Transport> State<H, T> {
|
|||||||
Writing::Chunk(chunk)
|
Writing::Chunk(chunk)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => Writing::Closed,
|
_ => return, // Keep State::Closed.
|
||||||
};
|
};
|
||||||
match (reading, writing) {
|
match (reading, writing) {
|
||||||
(Reading::KeepAlive, Writing::KeepAlive) => {
|
(Reading::KeepAlive, Writing::KeepAlive) => {
|
||||||
let next = factory.keep_alive_interest();
|
let next = factory.keep_alive_interest();
|
||||||
State::Init {
|
mem::replace(self, State::Init {
|
||||||
interest: next.interest,
|
interest: next.interest,
|
||||||
timeout: next.timeout,
|
timeout: next.timeout,
|
||||||
}
|
});
|
||||||
|
return;
|
||||||
},
|
},
|
||||||
(reading, Writing::Chunk(chunk)) => {
|
(reading, Writing::Chunk(chunk)) => {
|
||||||
State::Http1(Http1 {
|
http1.reading = reading;
|
||||||
reading: reading,
|
http1.writing = Writing::Chunk(chunk);
|
||||||
writing: Writing::Chunk(chunk),
|
|
||||||
.. http1
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
_ => State::Closed
|
_ => return // Keep State::Closed.
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(State::Http1(mut http1), Next_::Read) => {
|
Next_::Read => {
|
||||||
http1.reading = match http1.reading {
|
http1.reading = match http1.reading {
|
||||||
Reading::Init => Reading::Parse,
|
Reading::Init => Reading::Parse,
|
||||||
Reading::Wait(decoder) => Reading::Body(decoder),
|
Reading::Wait(decoder) => Reading::Body(decoder),
|
||||||
@@ -791,10 +789,8 @@ impl<H: MessageHandler<T>, T: Transport> State<H, T> {
|
|||||||
},
|
},
|
||||||
same => same
|
same => same
|
||||||
};
|
};
|
||||||
|
|
||||||
State::Http1(http1)
|
|
||||||
},
|
},
|
||||||
(State::Http1(mut http1), Next_::Write) => {
|
Next_::Write => {
|
||||||
http1.writing = match http1.writing {
|
http1.writing = match http1.writing {
|
||||||
Writing::Wait(encoder) => Writing::Ready(encoder),
|
Writing::Wait(encoder) => Writing::Ready(encoder),
|
||||||
Writing::Init => Writing::Head,
|
Writing::Init => Writing::Head,
|
||||||
@@ -818,9 +814,8 @@ impl<H: MessageHandler<T>, T: Transport> State<H, T> {
|
|||||||
},
|
},
|
||||||
same => same
|
same => same
|
||||||
};
|
};
|
||||||
State::Http1(http1)
|
|
||||||
},
|
},
|
||||||
(State::Http1(mut http1), Next_::ReadWrite) => {
|
Next_::ReadWrite => {
|
||||||
http1.reading = match http1.reading {
|
http1.reading = match http1.reading {
|
||||||
Reading::Init => Reading::Parse,
|
Reading::Init => Reading::Parse,
|
||||||
Reading::Wait(decoder) => Reading::Body(decoder),
|
Reading::Wait(decoder) => Reading::Body(decoder),
|
||||||
@@ -836,9 +831,8 @@ impl<H: MessageHandler<T>, T: Transport> State<H, T> {
|
|||||||
},
|
},
|
||||||
same => same
|
same => same
|
||||||
};
|
};
|
||||||
State::Http1(http1)
|
|
||||||
},
|
},
|
||||||
(State::Http1(mut http1), Next_::Wait) => {
|
Next_::Wait => {
|
||||||
http1.reading = match http1.reading {
|
http1.reading = match http1.reading {
|
||||||
Reading::Body(decoder) => Reading::Wait(decoder),
|
Reading::Body(decoder) => Reading::Wait(decoder),
|
||||||
same => same
|
same => same
|
||||||
@@ -853,21 +847,12 @@ impl<H: MessageHandler<T>, T: Transport> State<H, T> {
|
|||||||
},
|
},
|
||||||
same => same
|
same => same
|
||||||
};
|
};
|
||||||
State::Http1(http1)
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
let new_state = match new_state {
|
|
||||||
State::Init { interest, .. } => State::Init {
|
|
||||||
timeout: timeout,
|
|
||||||
interest: interest,
|
|
||||||
},
|
|
||||||
State::Http1(mut http1) => {
|
|
||||||
http1.timeout = timeout;
|
http1.timeout = timeout;
|
||||||
State::Http1(http1)
|
mem::replace(self, State::Http1(http1));
|
||||||
}
|
}
|
||||||
other => other
|
|
||||||
};
|
};
|
||||||
mem::replace(self, new_state);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user