async-imap 0.11.2

Async IMAP client for Rust
Documentation
use std::fmt;

use bytes::BytesMut;
use imap_proto::{RequestId, Response};
use self_cell::self_cell;

self_cell!(
    pub struct ResponseData {
        owner: BytesMut,

        #[covariant]
        dependent: Response,
    }
);

impl std::cmp::PartialEq for ResponseData {
    fn eq(&self, other: &Self) -> bool {
        self.parsed() == other.parsed()
    }
}

impl std::cmp::Eq for ResponseData {}

impl fmt::Debug for ResponseData {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("ResponseData")
            .field("raw", &self.borrow_owner().len())
            .field("response", self.borrow_dependent())
            .finish()
    }
}

impl ResponseData {
    pub fn request_id(&self) -> Option<&RequestId> {
        match self.borrow_dependent() {
            Response::Done { ref tag, .. } => Some(tag),
            _ => None,
        }
    }

    pub fn parsed(&self) -> &Response<'_> {
        self.borrow_dependent()
    }
}