#[cfg(feature = "bounded-static")]
use bounded_static::ToStatic;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "ext_idle")]
use crate::core::Tag;
use crate::mailbox::Mailbox;
#[cfg_attr(feature = "bounded-static", derive(ToStatic))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum State<'a> {
Greeting,
NotAuthenticated,
Authenticated,
Selected(Mailbox<'a>),
Logout,
#[cfg(feature = "ext_idle")]
#[cfg_attr(docsrs, doc(cfg(feature = "ext_idle")))]
IdleAuthenticated(Tag<'a>),
#[cfg(feature = "ext_idle")]
#[cfg_attr(docsrs, doc(cfg(feature = "ext_idle")))]
IdleSelected(Tag<'a>, Mailbox<'a>),
}
#[cfg(test)]
mod tests {
#[cfg(feature = "bounded-static")]
use bounded_static::{IntoBoundedStatic, ToBoundedStatic};
use super::*;
#[cfg(feature = "ext_idle")]
use crate::core::Tag;
use crate::mailbox::Mailbox;
#[test]
fn test_conversion() {
let tests = [
State::Greeting,
State::NotAuthenticated,
State::Authenticated,
State::Selected(Mailbox::Inbox),
State::Logout,
#[cfg(feature = "ext_idle")]
State::IdleAuthenticated(Tag::try_from("A").unwrap()),
#[cfg(feature = "ext_idle")]
State::IdleSelected(Tag::try_from("A").unwrap(), Mailbox::Inbox),
];
for _test in tests {
#[cfg(feature = "bounded-static")]
{
let test_to_static = _test.to_static();
assert_eq!(_test, test_to_static);
let test_into_static = _test.into_static();
assert_eq!(test_to_static, test_into_static);
}
}
}
}