use crate::common::StatusIndicator;
#[derive(Debug, PartialEq)]
pub struct Greeting<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct Quit<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct OneLineTwoParts<'a> {
pub left: StatusIndicator,
pub right: &'a [u8],
}
impl Default for OneLineTwoParts<'_> {
fn default() -> Self {
OneLineTwoParts {
left: StatusIndicator::OK,
right: &[],
}
}
}
impl Default for Quit<'_> {
fn default() -> Self {
Quit {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl Default for Greeting<'_> {
fn default() -> Self {
Greeting {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
pub trait OneLine<'a>: Default {
fn status_indicator(&self) -> &StatusIndicator;
fn set_status_indicator(&mut self, si: StatusIndicator);
fn information(&self) -> &[u8];
fn set_information(&mut self, information: &'a [u8]);
}
impl<'a> OneLine<'a> for Greeting<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}
impl<'a> OneLine<'a> for Quit<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, message: &'a [u8]) {
self.information = message;
}
}
impl<'a> OneLine<'a> for OneLineTwoParts<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.left
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.left = si;
}
fn information(&self) -> &[u8] {
&self.right
}
fn set_information(&mut self, information: &'a [u8]) {
self.right = information;
}
}
#[derive(Debug, PartialEq)]
pub struct Stat<'a> {
pub status_indicator: StatusIndicator,
pub number_of_messages: usize,
pub size_in_octets: usize,
pub information: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct List<'a> {
pub status_indicator: StatusIndicator,
pub informations: Vec<(usize, usize)>,
pub information: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct Uidl<'a> {
pub status_indicator: StatusIndicator,
pub informations: Vec<(usize, &'a [u8])>,
pub information: &'a [u8],
}
pub trait HaveMessageBody<'a>: Default {
fn set_status_indicator(&mut self, si: StatusIndicator);
fn set_message(&mut self, message: Option<&'a [u8]>);
fn set_information(&mut self, information: &'a [u8]);
}
#[derive(Debug, PartialEq)]
pub struct Retr<'a> {
pub status_indicator: StatusIndicator,
pub message: Option<&'a [u8]>,
pub information: &'a [u8],
}
impl Default for Retr<'_> {
fn default() -> Self {
Retr {
status_indicator: StatusIndicator::OK,
message: None,
information: &[],
}
}
}
impl<'a> HaveMessageBody<'a> for Retr<'a> {
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn set_message(&mut self, msg: Option<&'a [u8]>) {
self.message = msg;
}
fn set_information(&mut self, info: &'a [u8]) {
self.information = info;
}
}
#[derive(Debug, PartialEq)]
pub struct Top<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
pub message: Option<&'a [u8]>,
}
impl Default for Top<'_> {
fn default() -> Self {
Top {
status_indicator: StatusIndicator::OK,
information: &[],
message: None,
}
}
}
impl<'a> HaveMessageBody<'a> for Top<'a> {
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn set_message(&mut self, msg: Option<&'a [u8]>) {
self.message = msg;
}
fn set_information(&mut self, info: &'a [u8]) {
self.information = info;
}
}
#[derive(Debug, PartialEq)]
pub struct Dele<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
impl Default for Dele<'_> {
fn default() -> Self {
Dele {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl<'a> OneLine<'a> for Dele<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}
#[derive(Debug, PartialEq)]
pub struct Noop<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
impl Default for Noop<'_> {
fn default() -> Self {
Noop {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl<'a> OneLine<'a> for Noop<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}
#[derive(Debug, PartialEq)]
pub struct Rset<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
impl Default for Rset<'_> {
fn default() -> Self {
Rset {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl<'a> OneLine<'a> for Rset<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}
#[derive(Debug, PartialEq)]
pub struct User<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
impl Default for User<'_> {
fn default() -> Self {
User {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl<'a> OneLine<'a> for User<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}
#[derive(Debug, PartialEq)]
pub struct Pass<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
impl Default for Pass<'_> {
fn default() -> Self {
Pass {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl<'a> OneLine<'a> for Pass<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}
#[derive(Debug, PartialEq)]
pub struct Apop<'a> {
pub status_indicator: StatusIndicator,
pub information: &'a [u8],
}
impl Default for Apop<'_> {
fn default() -> Self {
Apop {
status_indicator: StatusIndicator::OK,
information: &[],
}
}
}
impl<'a> OneLine<'a> for Apop<'a> {
fn status_indicator(&self) -> &StatusIndicator {
&self.status_indicator
}
fn set_status_indicator(&mut self, si: StatusIndicator) {
self.status_indicator = si;
}
fn information(&self) -> &[u8] {
&self.information
}
fn set_information(&mut self, information: &'a [u8]) {
self.information = information;
}
}