Remove wrapper around ResponseCode.
This commit is contained in:
parent
7eb2cfde74
commit
efa02f07ab
2 changed files with 17 additions and 73 deletions
|
|
@ -228,7 +228,7 @@ mod deleted;
|
||||||
pub use self::deleted::Deleted;
|
pub use self::deleted::Deleted;
|
||||||
|
|
||||||
mod unsolicited_response;
|
mod unsolicited_response;
|
||||||
pub use self::unsolicited_response::{AttributeValue, ResponseCode, UnsolicitedResponse};
|
pub use self::unsolicited_response::{AttributeValue, UnsolicitedResponse};
|
||||||
|
|
||||||
/// This type wraps an input stream and a type that was constructed by parsing that input stream,
|
/// This type wraps an input stream and a type that was constructed by parsing that input stream,
|
||||||
/// which allows the parsed type to refer to data in the underlying stream instead of copying it.
|
/// which allows the parsed type to refer to data in the underlying stream instead of copying it.
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@ use super::{Flag, Seq, Uid};
|
||||||
use crate::error::ParseError;
|
use crate::error::ParseError;
|
||||||
|
|
||||||
/// re-exported from imap_proto;
|
/// re-exported from imap_proto;
|
||||||
|
pub use imap_proto::ResponseCode;
|
||||||
pub use imap_proto::StatusAttribute;
|
pub use imap_proto::StatusAttribute;
|
||||||
use imap_proto::{
|
use imap_proto::{AttributeValue as ImapProtoAttributeValue, MailboxDatum, Response, Status};
|
||||||
AttributeValue as ImapProtoAttributeValue, MailboxDatum, Response,
|
|
||||||
ResponseCode as ImapProtoResponseCode, Status,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Responses that the server sends that are not related to the current command.
|
/// Responses that the server sends that are not related to the current command.
|
||||||
/// [RFC 3501](https://tools.ietf.org/html/rfc3501#section-7) states that clients need to be able
|
/// [RFC 3501](https://tools.ietf.org/html/rfc3501#section-7) states that clients need to be able
|
||||||
|
|
@ -30,7 +28,7 @@ pub enum UnsolicitedResponse {
|
||||||
/// information, per [RFC3501](https://tools.ietf.org/html/rfc3501#section-7.1.5).
|
/// information, per [RFC3501](https://tools.ietf.org/html/rfc3501#section-7.1.5).
|
||||||
Bye {
|
Bye {
|
||||||
/// Optional response code.
|
/// Optional response code.
|
||||||
code: Option<ResponseCode>,
|
code: Option<ResponseCode<'static>>,
|
||||||
/// Information text that may be presented to the user.
|
/// Information text that may be presented to the user.
|
||||||
information: Option<String>,
|
information: Option<String>,
|
||||||
},
|
},
|
||||||
|
|
@ -94,7 +92,7 @@ pub enum UnsolicitedResponse {
|
||||||
/// information, per [RFC3501](https://tools.ietf.org/html/rfc3501#section-7.1.1).
|
/// information, per [RFC3501](https://tools.ietf.org/html/rfc3501#section-7.1.1).
|
||||||
Ok {
|
Ok {
|
||||||
/// Optional response code.
|
/// Optional response code.
|
||||||
code: Option<ResponseCode>,
|
code: Option<ResponseCode<'static>>,
|
||||||
/// Information text that may be presented to the user.
|
/// Information text that may be presented to the user.
|
||||||
information: Option<String>,
|
information: Option<String>,
|
||||||
},
|
},
|
||||||
|
|
@ -188,46 +186,20 @@ impl<'a> TryFrom<Response<'a>> for UnsolicitedResponse {
|
||||||
}
|
}
|
||||||
Response::Data {
|
Response::Data {
|
||||||
status: Status::Ok,
|
status: Status::Ok,
|
||||||
ref code,
|
code,
|
||||||
ref information,
|
information,
|
||||||
} => {
|
} => Ok(UnsolicitedResponse::Ok {
|
||||||
let info = information.as_ref().map(|s| s.to_string());
|
code: code.map(|c| c.into_owned()),
|
||||||
if let Some(code) = code {
|
information: information.map(|s| s.to_string()),
|
||||||
match ResponseCode::try_from(code) {
|
}),
|
||||||
Ok(owncode) => Ok(UnsolicitedResponse::Ok {
|
|
||||||
code: Some(owncode),
|
|
||||||
information: info,
|
|
||||||
}),
|
|
||||||
_ => Err(response),
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Ok(UnsolicitedResponse::Ok {
|
|
||||||
code: None,
|
|
||||||
information: info,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Response::Data {
|
Response::Data {
|
||||||
status: Status::Bye,
|
status: Status::Bye,
|
||||||
ref code,
|
code,
|
||||||
ref information,
|
information,
|
||||||
} => {
|
} => Ok(UnsolicitedResponse::Bye {
|
||||||
let info = information.as_ref().map(|s| s.to_string());
|
code: code.map(|c| c.into_owned()),
|
||||||
if let Some(code) = code {
|
information: information.map(|s| s.to_string()),
|
||||||
match ResponseCode::try_from(code) {
|
}),
|
||||||
Ok(owncode) => Ok(UnsolicitedResponse::Bye {
|
|
||||||
code: Some(owncode),
|
|
||||||
information: info,
|
|
||||||
}),
|
|
||||||
_ => Err(response),
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Ok(UnsolicitedResponse::Bye {
|
|
||||||
code: None,
|
|
||||||
information: info,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Response::Fetch(id, ref attributes) => {
|
Response::Fetch(id, ref attributes) => {
|
||||||
match AttributeValue::try_from_imap_proto_vec(attributes) {
|
match AttributeValue::try_from_imap_proto_vec(attributes) {
|
||||||
Ok(attrs) => Ok(UnsolicitedResponse::Fetch {
|
Ok(attrs) => Ok(UnsolicitedResponse::Fetch {
|
||||||
|
|
@ -242,34 +214,6 @@ impl<'a> TryFrom<Response<'a>> for UnsolicitedResponse {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Owned version of ResponseCode that wraps a subset of [`imap_proto::ResponseCode`]
|
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
|
||||||
#[non_exhaustive]
|
|
||||||
pub enum ResponseCode {
|
|
||||||
/// Highest ModSeq in the mailbox, [RFC4551](https://tools.ietf.org/html/rfc4551#section-3.1.1)
|
|
||||||
HighestModSeq(u64),
|
|
||||||
/// Next UID in the mailbox, [RFC3501](https://tools.ietf.org/html/rfc3501#section-2.3.1.1)
|
|
||||||
UidNext(Uid),
|
|
||||||
/// Mailbox UIDVALIDITY, [RFC3501](https://tools.ietf.org/html/rfc3501#section-2.3.1.1)
|
|
||||||
UidValidity(u32),
|
|
||||||
/// Sequence number of first message without the `\\Seen` flag
|
|
||||||
Unseen(Seq),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> TryFrom<&ImapProtoResponseCode<'a>> for ResponseCode {
|
|
||||||
type Error = ParseError;
|
|
||||||
|
|
||||||
fn try_from(val: &ImapProtoResponseCode<'a>) -> Result<Self, Self::Error> {
|
|
||||||
match val {
|
|
||||||
ImapProtoResponseCode::HighestModSeq(seq) => Ok(ResponseCode::HighestModSeq(*seq)),
|
|
||||||
ImapProtoResponseCode::UidNext(uid) => Ok(ResponseCode::UidNext(*uid)),
|
|
||||||
ImapProtoResponseCode::UidValidity(uid) => Ok(ResponseCode::UidValidity(*uid)),
|
|
||||||
ImapProtoResponseCode::Unseen(seq) => Ok(ResponseCode::Unseen(*seq)),
|
|
||||||
unhandled => Err(ParseError::Unexpected(format!("{:?}", unhandled))),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Owned version of AttributeValue that wraps a subset of [`imap_proto::AttributeValue`].
|
/// Owned version of AttributeValue that wraps a subset of [`imap_proto::AttributeValue`].
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue