wait to wait_while
This commit is contained in:
parent
692dcdd27e
commit
4232c773b5
2 changed files with 11 additions and 11 deletions
|
|
@ -63,7 +63,7 @@ fn main() {
|
||||||
// rest of the program and update mailbox state, decide to exit the IDLE, etc.
|
// rest of the program and update mailbox state, decide to exit the IDLE, etc.
|
||||||
let mut num_responses = 0;
|
let mut num_responses = 0;
|
||||||
let max_responses = opt.max_responses;
|
let max_responses = opt.max_responses;
|
||||||
let idle_result = idle.wait_keepalive(|response| {
|
let idle_result = idle.wait_keepalive_while(|response| {
|
||||||
num_responses += 1;
|
num_responses += 1;
|
||||||
println!("IDLE response #{}: {:?}", num_responses, response);
|
println!("IDLE response #{}: {:?}", num_responses, response);
|
||||||
if num_responses >= max_responses {
|
if num_responses >= max_responses {
|
||||||
|
|
|
||||||
|
|
@ -38,13 +38,13 @@ use std::time::Duration;
|
||||||
/// let idle = imap.idle().expect("Could not IDLE");
|
/// let idle = imap.idle().expect("Could not IDLE");
|
||||||
///
|
///
|
||||||
/// // Exit on any mailbox change
|
/// // Exit on any mailbox change
|
||||||
/// let result = idle.wait_keepalive(idle::stop_on_any);
|
/// let result = idle.wait_keepalive_while(idle::stop_on_any);
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// Note that the server MAY consider a client inactive if it has an IDLE command running, and if
|
/// Note that the server MAY consider a client inactive if it has an IDLE command running, and if
|
||||||
/// such a server has an inactivity timeout it MAY log the client off implicitly at the end of its
|
/// such a server has an inactivity timeout it MAY log the client off implicitly at the end of its
|
||||||
/// timeout period. Because of that, clients using IDLE are advised to terminate the IDLE and
|
/// timeout period. Because of that, clients using IDLE are advised to terminate the IDLE and
|
||||||
/// re-issue it at least every 29 minutes to avoid being logged off. [`Handle::wait_keepalive`]
|
/// re-issue it at least every 29 minutes to avoid being logged off. [`Handle::wait_keepalive_while`]
|
||||||
/// does this. This still allows a client to receive immediate mailbox updates even though it need
|
/// does this. This still allows a client to receive immediate mailbox updates even though it need
|
||||||
/// only "poll" at half hour intervals.
|
/// only "poll" at half hour intervals.
|
||||||
///
|
///
|
||||||
|
|
@ -73,8 +73,8 @@ pub fn stop_on_any(_response: UnsolicitedResponse) -> bool {
|
||||||
/// Must be implemented for a transport in order for a `Session` using that transport to support
|
/// Must be implemented for a transport in order for a `Session` using that transport to support
|
||||||
/// operations with timeouts.
|
/// operations with timeouts.
|
||||||
///
|
///
|
||||||
/// Examples of where this is useful is for `Handle::wait_keepalive` and
|
/// Examples of where this is useful is for `Handle::wait_keepalive_while` and
|
||||||
/// `Handle::wait_timeout`.
|
/// `Handle::wait_timeout_while`.
|
||||||
pub trait SetReadTimeout {
|
pub trait SetReadTimeout {
|
||||||
/// Set the timeout for subsequent reads to the given one.
|
/// Set the timeout for subsequent reads to the given one.
|
||||||
///
|
///
|
||||||
|
|
@ -129,7 +129,7 @@ impl<'a, T: Read + Write + 'a> Handle<'a, T> {
|
||||||
|
|
||||||
/// Internal helper that doesn't consume self.
|
/// Internal helper that doesn't consume self.
|
||||||
///
|
///
|
||||||
/// This is necessary so that we can keep using the inner `Session` in `wait_keepalive`.
|
/// This is necessary so that we can keep using the inner `Session` in `wait_keepalive_while`.
|
||||||
fn wait_inner<F>(&mut self, reconnect: bool, mut callback: F) -> Result<WaitOutcome>
|
fn wait_inner<F>(&mut self, reconnect: bool, mut callback: F) -> Result<WaitOutcome>
|
||||||
where
|
where
|
||||||
F: FnMut(UnsolicitedResponse) -> bool,
|
F: FnMut(UnsolicitedResponse) -> bool,
|
||||||
|
|
@ -194,7 +194,7 @@ impl<'a, T: Read + Write + 'a> Handle<'a, T> {
|
||||||
|
|
||||||
/// Block until the given callback returns `false`, or until a response
|
/// Block until the given callback returns `false`, or until a response
|
||||||
/// arrives that is not explicitly handled by [`UnsolicitedResponse`].
|
/// arrives that is not explicitly handled by [`UnsolicitedResponse`].
|
||||||
pub fn wait<F>(mut self, callback: F) -> Result<()>
|
pub fn wait_while<F>(mut self, callback: F) -> Result<()>
|
||||||
where
|
where
|
||||||
F: FnMut(UnsolicitedResponse) -> bool,
|
F: FnMut(UnsolicitedResponse) -> bool,
|
||||||
{
|
{
|
||||||
|
|
@ -203,7 +203,7 @@ impl<'a, T: Read + Write + 'a> Handle<'a, T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: SetReadTimeout + Read + Write + 'a> Handle<'a, T> {
|
impl<'a, T: SetReadTimeout + Read + Write + 'a> Handle<'a, T> {
|
||||||
/// Set the keep-alive interval to use when `wait_keepalive` is called.
|
/// Set the keep-alive interval to use when `wait_keepalive_while` is called.
|
||||||
///
|
///
|
||||||
/// The interval defaults to 29 minutes as dictated by RFC 2177.
|
/// The interval defaults to 29 minutes as dictated by RFC 2177.
|
||||||
pub fn set_keepalive(&mut self, interval: Duration) {
|
pub fn set_keepalive(&mut self, interval: Duration) {
|
||||||
|
|
@ -213,13 +213,13 @@ impl<'a, T: SetReadTimeout + Read + Write + 'a> Handle<'a, T> {
|
||||||
/// Block until the given callback returns `false`, or until a response
|
/// Block until the given callback returns `false`, or until a response
|
||||||
/// arrives that is not explicitly handled by [`UnsolicitedResponse`].
|
/// arrives that is not explicitly handled by [`UnsolicitedResponse`].
|
||||||
///
|
///
|
||||||
/// This method differs from [`Handle::wait`] in that it will periodically refresh the IDLE
|
/// This method differs from [`Handle::wait_while`] in that it will periodically refresh the IDLE
|
||||||
/// connection, to prevent the server from timing out our connection. The keepalive interval is
|
/// connection, to prevent the server from timing out our connection. The keepalive interval is
|
||||||
/// set to 29 minutes by default, as dictated by RFC 2177, but can be changed using
|
/// set to 29 minutes by default, as dictated by RFC 2177, but can be changed using
|
||||||
/// [`Handle::set_keepalive`].
|
/// [`Handle::set_keepalive`].
|
||||||
///
|
///
|
||||||
/// This is the recommended method to use for waiting.
|
/// This is the recommended method to use for waiting.
|
||||||
pub fn wait_keepalive<F>(self, callback: F) -> Result<()>
|
pub fn wait_keepalive_while<F>(self, callback: F) -> Result<()>
|
||||||
where
|
where
|
||||||
F: FnMut(UnsolicitedResponse) -> bool,
|
F: FnMut(UnsolicitedResponse) -> bool,
|
||||||
{
|
{
|
||||||
|
|
@ -237,7 +237,7 @@ impl<'a, T: SetReadTimeout + Read + Write + 'a> Handle<'a, T> {
|
||||||
/// Block until the given given amount of time has elapsed, the given callback
|
/// Block until the given given amount of time has elapsed, the given callback
|
||||||
/// returns `false`, or until a response arrives that is not explicitly handled
|
/// returns `false`, or until a response arrives that is not explicitly handled
|
||||||
/// by [`UnsolicitedResponse`].
|
/// by [`UnsolicitedResponse`].
|
||||||
pub fn wait_with_timeout<F>(self, timeout: Duration, callback: F) -> Result<WaitOutcome>
|
pub fn wait_with_timeout_while<F>(self, timeout: Duration, callback: F) -> Result<WaitOutcome>
|
||||||
where
|
where
|
||||||
F: FnMut(UnsolicitedResponse) -> bool,
|
F: FnMut(UnsolicitedResponse) -> bool,
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue