Return SessionAlreadyExists error in Occupant::add_session

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2022-09-17 16:53:33 +02:00
parent 307a888a0b
commit f2c8e74ef4
Signed by: pep
GPG key ID: DEDA74AEECA9D0F2
2 changed files with 17 additions and 2 deletions

View file

@ -24,6 +24,7 @@ pub enum Error {
MismatchJids(Jid, Jid),
NickAlreadyAssigned(String),
NonexistantSession(FullJid),
SessionAlreadyExists(FullJid),
XMPPError(TokioXMPPError),
}
@ -35,6 +36,7 @@ impl fmt::Display for Error {
Error::MismatchJids(jid1, jid2) => write!(f, "Mismatch Jids: {}, {}", jid1, jid2),
Error::NickAlreadyAssigned(err) => write!(f, "Nickname already assigned: {}", err),
Error::NonexistantSession(err) => write!(f, "Session doesn't exist: {}", err),
Error::SessionAlreadyExists(err) => write!(f, "Session already exist: {}", err),
Error::XMPPError(err) => write!(f, "XMPP error: {}", err),
}
}

View file

@ -221,15 +221,28 @@ impl Occupant {
pub fn add_session(&mut self, real: FullJid) -> Result<(), Error> {
if BareJid::from(real.clone()) != self.real {
return Err(Error::MismatchJids(Jid::from(self.real.clone()), Jid::from(real.clone())));
return Err(Error::MismatchJids(
Jid::from(self.real.clone()),
Jid::from(real.clone()),
));
}
for session in &self.sessions {
if &real == session {
return Err(Error::SessionAlreadyExists(real));
}
}
self.sessions.push(real);
Ok(())
}
pub fn remove_session(&mut self, real: FullJid) -> Result<(), Error> {
if BareJid::from(real.clone()) != self.real {
return Err(Error::MismatchJids(Jid::from(self.real.clone()), Jid::from(real.clone())));
return Err(Error::MismatchJids(
Jid::from(self.real.clone()),
Jid::from(real.clone()),
));
}
let len = self.sessions.len();